總之:是的。
在this page你可以看到這個sha1總和是如何形成的。它是由:
- 的源樹提交(它揭開所有子樹和 斑點)
- 父提交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總和中;然後在sha1和源樹中,最後在sha1之和提交。
謝謝!你能舉一個例子,說明如何從文件內容中使用'git cat-file -p'生成(文件)哈希值?它們似乎不是該文件的「sha1sum」。 – Zulakis
'git hash-object' –
@ChrisMartin的評論者:正如你所說的,你不想解決碰撞的可能性,就我而言,答案是YES。正如ChrisMartin指出的那樣;這種可能性仍然存在,所以沒有堅實的**保證**,即永遠不會發生碰撞。 –