2015-06-03 14 views
0

爲什麼提交散列在以下玩具回購中有所不同?

這是所有提交中的相同文件,只是在不同的分支。我的理解是,git不使用分支名稱來計算散列。

+0

這也可能感興趣:http://stackoverflow.com/questions/23791999/why-does-git-commit-amend-change-the-hash-even-if-i-dont-make-any-更改 – Jubobs

+0

「不使用分支名稱來計算散列」。 - 它從來沒有。 –

回答

0

根據this gist,提交的SHA使用以下所有信息計算:

  • 的源樹中的提交(其解開到所有的子樹和斑點)
  • 父提交SHA1
  • 作者信息(姓名,電子郵件地址和時間)
  • 的提交者信息(姓名,電子郵件地址和時間)
  • 的提交信息

在你的情況,很可能是因爲提交的時間是不同的,這將導致不同的提交ID。

要查看的確切信息被用於計算提交哈希,您可以使用下面的命令(無論提交您要查看的數據替換HEAD):

(printf "commit %s\0" $(git cat-file commit HEAD | wc -c); git cat-file commit HEAD) 

您可以驗證這一點將前一個命令的結果傳送給sha1sum。您應該取回用於代替HEAD的提交的完整ID。

要找出到底什麼是這兩個提交之間的不同,你可以運行以下命令:

diff <(git cat-file commit 3fbf300) <(git cat-file commit 5bc715f) 

如果樹上有不同的ID,然後你可以運行git diff 3fbf300 5bc715f找到不同的是什麼文件之間在每個提交中。

1

顯示的結果還不夠清楚,但可能是因爲您在不同的時間進行了提交,或者對作者和/或提交者名稱和/或提交消息進行了輕微更改。

散列應該是相同的,如果所有的文件都是相同的。該提交哈希是SHA-1的提交內容,不過,提交的內容是這樣的:

tree 2d6f17582c301f3c19f64afbe70b629fcc68505b 
parent 3dc5ce0a5686ede82b7ee20c895372f61a74f839 
author Junio C Hamano <[email protected]> 1433188076 -0700 
committer Junio C Hamano <[email protected]> 1433188076 -0700 

Sixth batch for 2.5 cycle 

Signed-off-by: Junio C Hamano <[email protected]> 

(這是混帳當前的主分支,爲我跑git fetch的時間) 。請注意作者和提交者時間戳。

0

嘗試運行git cat-file commit <branch/commit/etc>。這是通過SHA1運行以生成提交ID(加上指示數據長度的標頭)的內容。

關於提交IDS是如何構造的更多信息,請參閱https://gist.github.com/masak/2415865

相關問題