Git中的三棵树是什么?

Git已成为用于版本控制和共享代码的最广泛使用的系统。 如果您想帮助构建开源软件,或者要与专业团队合作,那么必须了解Git。

在有关Envato Tuts +的一系列Git课程中 ,我解释了一些Git核心概念,并通过有用的动画进行了说明。

在本视频中,您将了解三棵树:HEAD,索引和工作目录。 在我解释它们的作用以及它们在更新和提交代码时如何交互时请注意。

Git基础知识:三棵树

什么是三棵树?

为了更好地了解Git的运行方式,我们可以使用三棵树的隐喻。 这些树是文件的不同集合。

对于添加和检索提交的工作流程,Git使用三种不同版本的文件:

  1. 工作目录
  2. 索引
  3. 称为“ HEAD”的东西,用于创建和检索提交
三棵树

这些树中的每一个都有不同的工作:一棵树用于编写更改,一棵树用于暂存更改,一棵树指向您在Git存储库中对分支的最后一次提交。

文件的不同版本

内容可以更改的文件位于您的工作目录中。 放置在索引中的文件已准备好打包成一个提交对象。 这些提交将保存在您的Git存储库中。

已经提交的文件是压缩文件。 它们通过SHA-1(一种密码散列函数)进行散列。 索引中的两个文件版本和提交本身的文件版本都保存在Git存储库中,该文件只是包装根目录下的.git目录。

工作目录代表计算机文件系统上的实际文件,您的代码编辑器可以使用这些文件来应用更改。 工作目录是特定提交的版本,是您检出的项目的特定快照。 它是HEAD在任何给定时刻指向的Git历史记录的版本。

“签出”意味着您具有从Git存储库中拉出的文件的解压缩版本,可以进行编辑。 该索引表示要跟踪的内容。 您也可以说这是与Git存储库相关的所有文件的列表。

在Git中检出文件

索引有两个名称。 当人们谈论暂存区域,暂存文件,缓存或目录缓存时,他们都在谈论索引。 您可以将索引视为下一次提交的草稿区,这是准备下一次提交的临时区域。

HEAD是git的一部分,它指向您的分支,默认情况下像master分支一样。 这是一个参考,它的工作很简单,但是却非常重要。 HEAD指向当前签出的分支,然后指向该分支的最后一次提交。 HEAD不仅可以及时移动(当您签出先前的提交时),而且在创建新分支或仅切换到其他分支时也可以移动。

这也是Git历史记录中可以放置下一个提交(下一个提交的父对象)的关键。 对于每个新的提交,它都会替换其对当前已检出分支的引用(默认情况下,当然是master分支)。

因此,实际上,HEAD是一个经常更改并指向两件事的引用:分支本身,并通过它,对该分支的最后一次提交。

Git的文件工作流程

让我们仔细看看在Git中处理文件的工作流程。 了解所有这些部分如何组合在一起至关重要。 之后,您将有更多的时间来了解Git中更高级的功能和概念。

这是一个例子:


在此示例中,我们提交了文件的两个版本。 您会看到存储库,索引和工作目录中的版本是相同的。 由于已经跟踪了这些文件,因此当您在工作目录中更改任何这些跟踪文件时,Git会注意到所有差异。

运行git status命令时,将看到已更改文件的列表,并以红色显示。 这表明您的工作目录(由代码编辑器中的代码表示)与索引之间存在差异,索引表示来自特定提交(最常见的是最后一次提交)的文件版本。

现在,您可以运行git add命令,将这些更改从工作目录放到暂存文件的索引中。 git status将显示以绿色显示添加到索引的文件。 这意味着您的更改已准备好被打包到一个新的提交中,HEAD可以指向它并以此为基础。

文件绿色清单仅表示索引中已暂存的文件的版本与之前已提交的文件的版本不同。 当您运行git commit ,这些暂存的文件将被放入新的提交对象中。 git commit命令会将实际文件名,每个文件的内容,作者信息,元数据等保存在新对象中。

该提交对象现在位于您的存储库中的.git目录中,它将成为HEAD指向的新引用。 它指向以前的提交,在某种程度上是冰山的一角。 创建提交对象之后,我们回到了循环的开始。

HEAD指向存储库中的提交再次与索引和工作目录中的版本匹配,这为新的更改准备就绪和提交做好了准备。 故事结局。

观看更多Git课程

如果您觉得这很有用,为什么不查看更多Git课程呢?

您可以观看我们的Git和GitHub简介,或尝试本系列的其他Coffee Break课程:

翻译自: https://code.tutsplus.com/tutorials/what-are-the-three-trees-in-git--cms-28188

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值