简而言之:是的。
在这个页面上,你可以看到这个 sha1 sum 是如何形成的。它由以下部分组成:
- 提交的源树(分解为所有子树和 blob)
- 父提交 sha1
- 作者信息
- 提交者信息(对,这些是不同的!)
- 提交消息
所以每个文件中的每个更改都包含在 sha1sum 的计算中。AFAIK,您可以相信对任何文件的任何更改都会在每种情况下给出不同的 sha1 总和。
编辑:我开始完成我的一项提交:
git cat-file commit HEAD
给出:
tree 563ccb5109fbf0a01d99517ca1dbe15db349592d
parent 3c6f0800708aeaaeaba804273406ddcd0b3175ad
...
现在git cat-file -p 563ccb5109fbf0a01d99517ca1dbe15db349592d
:
100644 blob d8fe4fa70f618843e9ab2df67167b49565c71f25 .gitignore
100644 blob dba1ba3a31837debf7a28eceb194e86916b88cbc README
040000 tree 37ad71e959c6dadd0e4b7aff8a0c6e85a0eff789 conf
040000 tree 60eca667ab8b5852ecd2dd2d91d198a3956a8b73 etc
040000 tree 634c4c2ec34aec14142b5991bd3a5126110f2cae sbin
040000 tree 256db03954535d25d5f340603e707207170f199c spec
040000 tree 9e1e156f88b842da471f52d4c135f391319b4991 usr
我可以继续深入: git cat-file -p d8fe4fa70f618843e9ab2df67167b49565c71f25
:
/.project
(这是我的 .gitignore 文件的内容)或git cat-file -p 256db03954535d25d5f340603e707207170f199c
:
100644 blob 591367a913adbeb1c86d674d240fb08ab8ccf78b base.spec
(这是我的“规范”目录的内容)。
如您所见,每个文件的内容都递归地存在于文件的 sha1 sum中;然后在源树的 sha1 sum 中,最后在commit的 sha1 sum 中。