理解git数据模型

理解git数据模型,git,Git,我最近开始阅读,以了解git在幕后是如何工作的。本书中有一个图表显示了Git数据模型: 在这个图中,我无法理解围绕提交和树对象的圆圈的含义。我也不清楚这三行从树到水滴的意思。我想知道是否有人能向我解释这些元素在git数据模型中的含义;DR:这些圆圈实际上是箭头,就像其余的线一样,这意味着提交可以引用其他提交,树可以引用其他树 此图中的所有线条都表示引用,A可以引用B 因此: HEAD可以引用一个分支(老实说,HEAD也可以直接引用一个commit并绕过该分支,但我们现在还不能使您的情况过于

我最近开始阅读,以了解git在幕后是如何工作的。本书中有一个图表显示了Git数据模型:


在这个图中,我无法理解围绕提交和树对象的圆圈的含义。我也不清楚这三行从树到水滴的意思。我想知道是否有人能向我解释这些元素在git数据模型中的含义;DR:这些圆圈实际上是箭头,就像其余的线一样,这意味着提交可以引用其他提交,树可以引用其他树


此图中的所有线条都表示引用,A可以引用B

因此:

  • HEAD可以引用一个分支(老实说,HEAD也可以直接引用一个commit并绕过该分支,但我们现在还不能使您的情况过于复杂)
  • 分支可以引用特定的提交
  • 标记还可以引用特定的提交
  • 提交可以引用树(存储库快照的“目录”)
  • 树可以引用该目录中的一个或多个blob或文件
但是,您所问的圆圈的意思是:

  • 提交通常指其父提交
    • 存储库中的第一次提交没有父级,因此引用了0个其他提交
    • 不合并的正常提交引用其直接父级,因此引用1个其他提交
    • 合并提交引用合并的两个父级(或者如果您进行八达通合并,则引用两个以上的父级),同样,不要过度复杂,因此忽略此部分)
  • 树类似于单个文件夹的目录,因此可以引用
    • 单个文件夹中的blob(文件)
    • 组成子文件夹的树

这就是那些圆圈的意思,提交和树可以递归地引用提交和树。可能缺少了一个箭头,这让人很难理解,但这就是那些圆圈的意思,它们实际上只是圆形箭头。

提交可以指一个或多个提交,即父提交。存储库中的第一次提交没有父级(指0个其他提交),正常的单个提交有一个对其直接父级的引用(指1个其他提交),合并指组成合并的父级(通常是2个父级提交,但您可以使用2个以上的父级进行八达通合并)。因此,提交可以引用其他提交,因此循环。树木也是如此。树是单个文件夹的目录,但该文件夹/树可以包含子文件夹/嵌套树,因此树可以引用其他树。是的,从
tree
blob
的三行显示了每个树如何引用多个blob。圆圈可能表示
递归的
。提交可以引用其他提交(子模块),树可以引用其他树(子文件夹)。这三行可能表示树引用了blob。@ElpieKay:Commission引用了其他blob与这里的子模块无关,它只是父提交。请注意,这里有一个小技术故障(可能是故意简化):标记可以引用树或blob,或指向可以引用四种类型的内部对象中的任何一种的带注释的标记对象
HEAD
还可以直接引用提交,而不仅仅是分支名称。