适用于计算机科学家的Git

2021-06-13 18:47:39

对于人们的Git Internals的快速介绍,人们不会被指示的AcyclicGraph这样的单词害怕。

在简化的形式中,Git对象存储是" Just"物体的衰剧,具有少数不同类型的物体。它们都是由SHA-1哈希(顺便提及,ISN'它们所代表的文件内容的SHA-1)所储存并识别。

blob:最简单的对象,只是一堆字节。这是valaya文件,但可以是一个符号链接或几乎别的。 theObject指向blob确定语义。

树:目录由树对象表示。他们将拥有文件内容(文件名,访问模式等的Blobs,以及用于子目录的其他树。

当节点指向DAG中的另一个节点时,它取决于其他节点:如果没有它,它就不能存在。 NOTES POINTSO无法使用GIT GC收集的垃圾,或者救出了许多类似物的inode,没有文件名指向Git FSCK --lost-reved。

提交:提交引用了一个树,该树代表在提交时的文件。它还指的是0 ..另一个是其父母的其他提交。不仅仅是一个单独的意味着提交是合并的,没有父母意味着它是一个有趣的,而且有趣的是一定的犯罪;这通常意味着两个单独的ProjectSmerged。提交对象的正文是提交消息。

参考文献:引用或头部或分支,就像在DAG中的节点上的发布帖子。在DAG仅添加扎带的情况下,现有节点不能突变,它可以自由地移动。他们没有存储在历史记录中,并直接在存储库之间转移。它们作为Sortof书签,"我在这里工作"

Git提交将节点添加到DAG,并将后IT备注的当前分支移动到此新节点。

Head Ref特别是它实际上指向另一个人。它是与当前活动分支的指针。普通refsare实际上在命名空间头/ xxx中,但您通常可以跳过头部/部分。

远程refs:远程引用是不同颜色的后IT注释。与正常refs的差异是不同的命名空间,并且远程refs基本上由ThereMote服务器控制的事实。 git fetch更新它们。

标签:标记是DAG中的节点和后IT备注(OFYET另一种颜色)。标签指向提交,包括可选消息和GPG签名。

帖子只是访问标签的快速方法,如果丢失才能从带有Git FSCK的DAG恢复,而是找到。

DAG中的节点可以从存储库移动到存储库,可以存储以更有效的形式(包),并且未使用的节点可以开始收集。但最终,Git存储库总是justa Dag和帖子。

因此,有关Git如何存储VersionHistory的知识,我们如何通过如何将逻辑视为合并的东西,以及尝试管理历史记录的工具中的GitDiffer如何成为线性变化。

这是最简单的存储库。我们克隆了一个提交的远程存储库。

在这里,我们已经获取了遥控器并从遥控器中收到了一个新的提交,但尚未合并它。

git合并remotes / myserver / master后的情况。正如Themerge的那样快进(即,我们在OuroCal分支中没有新的犯规),唯一发生的事情正在移动我们的后IT注意并分别在我们的工作目录中更改文件。

一个本地git提交和稍后的git获取。我们都有一个新的本地提交和新的远程提交。显然,合并了。

git合并remotes / myserver / master的结果。因为我们触动了本地提交,这不是一个快进,而是在DAG中创建了一个实际的新提交节点。请注意它有两个父级提交。

在这里,树将在分支机构的几个提交中看的那样,这是什么&#39。看"缝合"模式出现? Gitdag究竟记录了所采取行动的历史。

"缝合"读取模式有点乏味。如果您尚未发布您的分支机构,或者已清楚地传达其他人不应将其工作放在上面,您还有替代方案。您可以重新绑定您的分支,而不是合并,您的提交用另一个父级的另一个提交,并且您的Branchis在那里移动。

你的旧承诺将留在DAG中,直到垃圾收集。现在就像他们一样了解他们,如果你完全搞砸了。 如果您有额外的帖子指向您的旧承诺,他们将保持指向它,并保持旧的致力于依然存在。 但是,这可能相当令人困惑。 Don' t rebase分支,其他人在Topof上创建了新的提交。 可以从中恢复,它并不难,但需要的工作可能会令人沮丧。 垃圾收集后的情况(或只是忽略了违规的提交),并在重新分支机构的顶部创建一个新的提交。 这'我们对被计算机科学没有倾犯的人的介绍介绍了Git。 希望它有所帮助!