`

git文件存储原理解析(八)

阅读更多

1.git的目录结构

 

 1.1 新建一个git-test空文件夹,使用git init 初始化,交由git管理

  

  1.2 .git 目录下 文件夹结构如下:

  

  

2.git如何保存数据?

  2.1.对象类型

  从内部来看,Git 是简单的 key-value 数据存储。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。可以通过底层命令hash-object 来示范这点,传一些数据给该命令,它会将数据保存在 .git 目录并返回表示这些数据的键值。

   tree对象

   blob对象

   commit对象

   tag对象

  对象之间关系:(参考git-scm.com官网图例)

  

 

   2.2. 向git-test写入一个文件file.txt,观察.git目录下变化

   对文件进行add  --> commit 才会发现objects文件目录才发生变化,也就是说 git 在每次对本地版本库 进行commit的时候,就会对数据 进行一次保存,这是 会生成 commit对象,tree对象以及blob对象。Git 存储数据内容的方式──为每份内容生成一个文件,取得该内容与头信息的 SHA-1 校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 (保存至子目录下)。

通过 cat-file 命令可以将数据内容取回。该命令是查看 Git 对象的瑞士军刀。

  

   首次提交对象及其树结构.

做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。

提交对象及其父对象.

 

 我们使用命令行查看一下刚刚写入文件变化:

  第一次commit   file.txt

  第二次commit   file2.txt  file3.txt

  参考下面截图:

  1).查看2次提交的commitId ,以及 git cat-file 命令使用

  

  2).查看第一次commit tree blob 类型 及存储类容

  

  3).查看第二次commit tree blob 类型及内容

  

  

 2.3 分支以及对象应用关系如下:

 

 

 

相关博客:

1).Git 版本控制工具介绍(一)

  2).Git 工作流程介绍(二)

  3).Github的使用(三)

  4).Git 常用命令(四)

  5).Git 版本回退(五)

  6).Git版本冲突解决(六)

  7).git 分支管理(七)

  8).git文件存储原理解析(八)

  • 大小: 16.3 KB
  • 大小: 36.4 KB
  • 大小: 26.3 KB
  • 大小: 43.2 KB
  • 大小: 50.2 KB
  • 大小: 35.5 KB
  • 大小: 34.3 KB
  • 大小: 42.4 KB
0
1
分享到:
评论
2 楼 MCLoginandPwd 2017-08-11  
分享一款代码生成器,拖拽式组件结合流式处理,很容易的访问数据库、http、文件读写操作等等,支持编写javascript、java、freemaker,功能丰富强大,编制规则,可生成一切想要的代码,详见:http://blog.csdn.net/LoginandPwd/article/details/76944900,更多资讯:http://blog.csdn.net/LoginandPwd/article
1 楼 carlosfu 2016-02-02  
  

相关推荐

    《ProGit》——Git使用和原理讲解

    《ProGit》是一本深入解析Git的权威指南,它详细阐述了Git的使用方法和内在原理,对于开发者来说,无论是初学者还是资深用户,都是一本不可多得的参考资料。Git是一款分布式版本控制系统,它的出现彻底改变了软件...

    git基本原理与常用命令

    2. **config文件**:此文件存储项目的各种配置信息,如用户设置、远程仓库地址等。 3. **HEAD文件**:它指示当前活动的分支。通常,HEAD指向一个分支名称,如`master`或`main`,但也可以直接指向一个特定的commit...

    git_reporter:解析 GIT 存储库和提取统计信息的实用程序

    在本文中,我们将深入探讨Git_reporter的工作原理、其在JavaScript中的实现以及如何使用它来分析Git存储库。 首先,Git_reporter的核心功能是读取Git仓库的元数据,这些数据存储在`.git`目录下的各种文件中,如`...

    一个 Git 文件格式和协议的纯Python实现,支持读取资源库内容、索引以及通过Git网络协议进行数据的读写

    Dulwich 是一个强大的开源项目,它为Python开发者提供了一个完整的Git文件格式和协议的实现。这个库的独特之处在于,它不依赖于Git命令行工具,而是完全用Python编写,允许程序在没有安装Git的情况下处理Git仓库。这...

    反射git 仓库内部数据存储结构。inspect git file structure.zip

    通过`ljg_resource1`文件,我们可以深入研究Git如何存储和组织这些数据结构,包括如何解析对象文件,如何使用SHA1哈希,以及如何读取和操作索引文件。这有助于理解Git的工作原理,从而更有效地使用和调试Git命令,...

    Git 自下而上方法pdf

    ### Git自下而上方法知识点解析 #### 一、引言与基础知识 - **自下而上的学习方法**:本书采用了一种独特的教学方法——自下而上的学习方式,即从Git的基础概念出发,逐步向上扩展到更高级的功能。这种方法有助于...

    cpp-GitFTP通过匿名FTP浏览git树并下载文件

    这个工具的工作原理可能是这样的:它首先连接到FTP服务器,然后模拟Git命令来获取仓库的文件和目录结构信息。用户可以通过FTP客户端或者GitFTP自身的界面来浏览这些信息,选择需要下载的文件。GitFTP会处理背后的...

    GIT图解完整PDF版

    ### Git图解完整PDF版知识点解析 #### 一、Git基础知识概述 **Git**是一种分布式版本控制系统,广泛应用于软件开发项目中,用于跟踪文件的变化历史并管理不同版本间的差异。本资料通过图解的方式深入浅出地介绍了...

    git应用开发详解

    此外,Git的存储机制采用对象库和打包文件,有效优化了存储空间。 关于IDEA的Git集成,IntelliJ IDEA是一款强大的Java开发集成环境,内置了对Git的全面支持。开发者可以直接在IDE内进行版本控制操作,如查看代码...

    git基础.md 基础学习资料

    ## Git基础原理与使用 ### Git底层命令 #### `git ls-files -s` - **用途**:列出暂存区中的文件列表。 - **应用场景**:当你想要了解哪些文件已经被添加到暂存区中,但还未进行提交时,该命令非常有用。 #### `...

    zip2git:获取 zip 文件并将其转换为 git 存储库,美好时光

    标题中的“zip2git”是一个工具,用于将ZIP文件转换为Git存储库。这个过程涉及到对ZIP文件内容的解析和转换,以便它们可以被Git管理。在IT领域,这种工具非常有用,因为Git是版本控制的首选系统,而ZIP文件则是一种...

    githack-master.zip

    1. **源码分析**:GitHack会遍历Git仓库中的所有文件,对代码进行语法解析,寻找可能包含敏感信息的模式,如硬编码的密码、API密钥等。 2. **配置文件检查**:许多应用程序的配置文件中可能存储了敏感信息,如`.env...

    transcrypt:透明加密git存储库中的文件

    "transcrypt:透明加密git存储库中的文件" 是一个关于使用名为 "transcrypt" 的工具来保护Git存储库中敏感数据的方法。这个工具的主要目的是在不改变Git工作流程的情况下,对存储在Git仓库中的文件进行加密,以确保...

    经典Git学习资料ProGit

    本书由Scott Chacon撰写,并通过电子书形式发布,为读者提供了深入理解Git操作流程及原理的机会。 #### 二、开始使用Git ##### 2.1 关于版本控制 版本控制系统是一种记录文件或目录更改的工具,它允许用户将文件...

    Git Community Book(中文版)

    最后,原理解析部分探讨了Git的内部原理,包括对象的存储、查看Git对象、引用、索引、打包文件、底层的Git操作、传输协议以及Git术语表。 整本Git Community Book中文版是社区共同维护的开放资源,汇聚了来自全球...

    go源码,git系统源码

    索引文件(.git/index)是Git快速查找文件状态的关键,通过源码可以了解其工作原理。 5. 性能优化: Git在设计上注重性能,例如使用裸仓库(bare repository)减少I/O操作,以及通过缓存(cache)提升命令执行速度...

    python_git-源码.rar

    Git 将文件的更改存储为四种基本对象:blob(文件内容)、tree(目录结构)、commit(提交信息)和 tag(标签)。在 Python Git 源码中,你会看到这些对象的类定义,以及如何通过它们进行数据的序列化和反序列化。 ...

    Git教程By廖雪峰

    - Git在本地存储文件的快照,而不是差异的变化。这意味着每一个版本都是完整地保存了项目的所有文件。 - Git将数据看作小型文件系统的一组快照。每次提交操作都是对项目状态创建一个快照,如果文件没有变化则指向...

    progit(ChineseEnglish).7z

    书中不仅有详细的命令行操作示例,还有对Git内部工作原理的解析,帮助读者理解Git如何跟踪和存储文件变化。 中文版的《ProGit》对于中国开发者来说是一大福音,它消除了语言障碍,使得国内开发者能够更好地理解和...

Global site tag (gtag.js) - Google Analytics