4

我试图理解 git 的管道命令以及它的低级操作如何构建高级操作,如添加和提交。

我知道,每次我使用:

git update-index file.txt

我从这个文件创建 blob 并在索引中创建引用(文件名和 SHA1 密钥一起写)(当然只有在文件被更改的情况下)。如果我提交,我会创建只指向一个 blob 的树(我只更改了一个文件)。

但是在 .git/objects 数据库中存储的不是一个,而是更多(例如五个或六个)由 update-index 命令从这个文件创建的 blob,它们不是由任何 commit object 指向的任何树所指向的。git 应该只保存这个 blob,它们位于提交创建的快照中。

Git 有一些自动垃圾回收,以后可以去掉不指向的 blob?命令 update-index 是 add 命令的完全等价物吗?

4

1 回答 1

0

Git有一个垃圾回收过程,它会被其他命令(如commit和pull)以一定的时间间隔自动调用,也可以通过running手动调用git gc,其中包括清理对象数据库,删除未引用的对象由另一个对象或分支/标记指针。

git 命令update-index是瓷器命令下的管道git add

这两个步骤过程还允许提交创建过程更快,因为 git 在创建提交时不必对文件进行哈希处理,因为当您将它们添加到索引时它们已被哈希处理并保存。

于 2016-03-16T15:28:46.353 回答