我尝试理解git的plumbings命令以及它的低级操作如何构建添加和提交等高级操作。
我知道,每次我使用:
的
的git update-index file.txt
的
我从这个文件创建blob并在索引中创建引用(文件名和SHA1键一起写)(当然只有在文件被更改时)。 如果我进行提交,我创建的树只指向一个blob(我只更改了一个文件)。
但是在.git / objects数据库中存储的不是一个,而是由这个文件中的update-index命令创建的更多(例如五个或六个)blob,这些blob没有被任何指向的树指向通过任何提交对象。 git应该只保存这个blob,它们位于commit提交的快照中。
Git有一些自动垃圾收集,可以在将来删除未指向的blob吗?命令update-index是add命令的完全等价物吗?
答案 0 :(得分:0)
Git有一个垃圾收集过程,它会以一定的间隔由其他命令(例如提交和拉取)自动调用,或者可以通过运行git gc
手动调用,这将除其他外,清理对象数据库,删除未被另一个对象引用的对象或分支/标记指针。
git命令update-index
是瓷器git add
命令下面的管道。
这个两步过程还允许提交创建过程更快,因为git在创建提交时不必对文件进行哈希处理,因为当您将它们添加到索引时它们被散列并保存。