Git 保存使用 index update-index 命令添加的文件的所有版本?

标签 git git-plumbing

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

我知道,每次我使用:

git update-index file.txt

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

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

Git 有一些自动垃圾收集功能,将来可以删除未指向的 blob?命令 update-index 是否完全等同于 add 命令?

最佳答案

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

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

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

关于Git 保存使用 index update-index 命令添加的文件的所有版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706767/

相关文章:

GitHub/Sourcetree 删除的标签重新出现

git - 在 merge 过程中如何优先选择一个分支中的文件?

git - 具有共享功能分支的正确 git 工作流程是什么?

git - 从单个分支获取文件的所有版本

git 管道命令获取远程子模块

git - 如何仅使用管道命令复制 git-checkout?

Git:如何在远程跟踪分支发生更改时自动更新我的本地分支?

git - `git checkout -- .` 的管道当量

git - 什么管道命令提供与 git log --follow 相同的功能?

c# - Git 仓库内部格式解释