git - git 会重用 blob 吗?

标签 git version-control

假设我提交了一个二进制文件,然后在几次提交之后更改了它,现在我在新的提交中将它改回了原样。

出于好奇,我想知道git是否为它创建了一个新的blob?或者它是否检测到它在历史记录中并重新使用它?如果是这样,它是如何检测到的?校验和?

最佳答案

Git 将重用相同的 blob。

我做过测试。我做了 3 次提交。首先我提交了一个二进制文件,然后我修改了二进制文件并再次提交。最后我用第一次提交中使用的原始二进制文件覆盖了文件并再次提交。

第 1 次和第 3 次提交中的二进制文件内容相同。每个提交都是以下分支的 HEAD:

第一次提交:“第一次”。第二次提交:“第二次”。第三次提交:“主人”

然后,如果您运行“git cat-file -p FIRST^{tree}”,它会显示二进制文件的哈希码。

$ git cat-file -p FIRST^{tree}
100644 blob ec049240a47b472bd7c31d1fa27118c4fe2f1229    test.db3
$ git cat-file -p SECOND^{tree}
100644 blob a47bb3727e5aefe3ec386bec5520f3e4ffb3a4c5    test.db3
$ git cat-file -p master^{tree}
100644 blob ec049240a47b472bd7c31d1fa27118c4fe2f1229    test.db3

你会发现第 1 次和第 3 次提交的 blob 的哈希码是相同的。

git 非常聪明,可以检查哈希码是否存在 blob,如果找到则重用该 blob。

关于git - git 会重用 blob 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884901/

相关文章:

git - 我们如何正确验证 git send-email 配置设置?

git - 显示上次 git 提交中编辑的文件的相对路径名?

git - 如何使用 .jar 工具 BFG Repo Cleaner 和减少 git 存储库?

Git 说自动 merge 失败但是当我检查文件或运行 mergetool 时没有冲突他们被正确解决

python - 如何跟踪 Python 中的依赖关系?

git - .git 对象文件夹中缺少哈希

git - 使用 SourceTree 将先前的 git 提交分解为更小的提交

version-control - 在您的源代码树中,自定义构建工具在哪里?

php - 多条关联数据的修订控制

Android、Azure Devops 在运行管道时出错 ##[error]Error : The process '/Users/runner/work/1/s/gradlew' failed with exit code 1