假设我提交了一个二进制文件,然后在几次提交之后更改了它,现在我在新的提交中将它改回了原样。
出于好奇,我想知道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/