美文网首页
Git工作原理

Git工作原理

作者: Lonelyyy | 来源:发表于2019-05-11 15:47 被阅读0次

按照官方文档的描述,Git是这样定义的

  • 内容寻址(content-addressable)文件系统,在此之上提供了一个VCS用户界面
  • Git采用HashTable的方式进行查找,通过简单的存储键值对的方式来实现内容寻址,key是文件头和内容组成的40位hash值,value是压缩过后的文件内容
    当然,这句话写得并不是很容易让人明白,通过查看git的目录结构以及细致地分析一次Git提交可以更好地帮助理解Git

.git目录

.git目录是Git的核心,每一个变动都会存储在.git文件夹中,Git的相关命令本质上也是读取.git文件夹下的内容
.git目录下有几个重要的文件/文件夹

  • config文件,主要存储项目的一些配置信息
  • objects文件夹, 存储git对象
  • HEAD文件,记录当前的头指针
  • index文件,存储暂存区的信息
  • refs文件夹, 存储分支的指针

git对象

提交和文件是Git中的主要组成,也叫git对象,Git中的许多命令都和git对象有关
git对象分为下面3类


image.png

git对象存储在.git目录下的objects文件夹中,Git会将git对象压缩成二进制文件,git对象的文件名即sha-1算法得到的hash值,按照2/38的形式保存(前两位是文件夹的名称,剩下38位是文件名,这样做可以防止文件夹的内容过多,提高查找效率)

对于commit对象,hash值也被称为commitid

可以使用以下命令查看git对象中的内容

git cat-file -p <hash>

通过查看三种git对象的内容,不难发现如下的组织关系


image.png
  • 每个commit的对象包含了tree和blob对象的hash
  • 每个tree对象包含了blob文件的hash
  • 每个blob对象是真正文件的二进制保存

其实可以吧hash看成每个对象的指针,Git通过指针将众多git对象串联起来,来实现对项目的版本控制

从Git命令看一次提交的完整过程

用户通过Git命令读写.git文件夹,达到获取信息或变更版本的目的

Git一开始被设计成供VCS使用的工具集合而不是一整套用户有好的VCS,它还包含了许多的底层命令,一般被称为plumbing命令(底层命令),而用户日常使用Git命令被称为porcelain命令(高层命令),porcelain命令实际是是对plumbing命令的封装

image.png

一次完整的提交过程会包含如下过程

  • 保存二进制对象(即生成blob对象)
  • 写入暂存区
  • 保存目录结构(生成tree对象)
  • 提交目录结构 (指定上一个提交的hash并生成commit对象)
  • 更新分支(更新分支指向的hash)

使用porcelain命令的话是非常简单的

git add <file>
git commit -m "commit message"

如果使用plumbing命令就会复杂很多,但是可以更好地理解其背后的工作原理

git hash-object -w <file>
git update-index <file>
git write-tree
echo "commit message" | git commit-tree writetreehash -p <last commit hash>
echo <commit hash> .git/refs/heads/<branchname>

Git分支和HEAD

通过前文的内容不难发现,每次生成的commit对象会包含上一个commit对象的hash,即当前的commit包含上一个commit的指针,许多个commit对象串联起来就形成了分支

所以,Git的分支本质上是指向commit对象的可变指针

而HEAD代表当前commit的指向,.git/refs/heads/<branchname>文件的内容就是该commit对象的hash

相关文章

  • git

    Git Git安装官网下载Git Git工作原理(图)imageWorkspace:工作区 (目录)Index /...

  • Git

    Git Git安装官网下载Git Git工作原理(图)imageWorkspace:工作区 (目录)Index /...

  • Git

    Git 1、Git安装 官方下载Git 2、Git工作原理(图) Workspace:工作区 (目录)Index ...

  • git的工作原理

    git的工作原理

  • git工作原理

    直接记录快照,而非差异比较 Git 和其它版本控制系统的主要差别在于 Git 对待数据的方法,其它大部分系统以文件...

  • Git工作原理

    按照官方文档的描述,Git是这样定义的 内容寻址(content-addressable)文件系统,在此之上提供了...

  • Git 使用指南

    [TOC] Git @(24.1 Git)[git] 工作原理 直接记录快照,而非差异比较Git 只关心文件数据的...

  • 图形化界面TortoiseGit的使用

    git工作原理如下图:git工作原理.jpg 首先在GitHub上创建一个新的库,如下图:创建库.jpg 新建一个...

  • Git学习笔记(一)

    本文主要分为以下几个方面: Git简介 Git工作流程及原理 Git基本操作 Git分支管理 Github远程仓库...

  • GIT常用命令总结(持续更新中...)

    git工作原理 通过上图大概可以看出git的工作原理: 本地工作区:随意的一个文件都可以被认为是工作区,一般来说指...

网友评论

      本文标题:Git工作原理

      本文链接:https://www.haomeiwen.com/subject/xiynoqtx.html