2011-12-18 175 views
4

我想我錯過了一些東西。我的印象是,git使用SHA-1哈希提交標識符意味着可以確定從其他人獲得的補丁沒有被修改。git-apply或git-am應該使用相同的散列嗎?

就拿這個測試我的機器上做了(姓名和電子郵件改變,很明顯):

cd dogcatcher 
dogcatcher> git log 
commit 926f347567a9da6f7692aca0e23d13f094d9e3a6 
Author: Joe User <[email protected]> 
Date: Sat Dec 17 15:28:55 2011 -0600 

    3rd branch commit 

commit 11e8055aa5e8f0d323c48b4f691adced7a8a9762 
Author: Joe User <[email protected]> 
Date: Sat Dec 17 15:10:44 2011 -0600 

    second branch commit 

commit 23deb7093a8565479092ef84142a0e2e7282d213 
Author: Joe User <[email protected]> 

dogcatcher> git format-patch 23de (format a patch containing everything since 23de) 

dogcatcher> cd .. 
~> cp -r dogcatcher catcatcher 
cd catcatcher 

catcatcher> git reset --hard 23de (reset HEAD to 23de) 
catcatcher> git am 00* (apply the two patch files) 
catcatcher> git log 

commit 2548980811d1875971ce1a018df98374950e0059 
Author: Joe User <[email protected]> 
Date: Sat Dec 17 15:28:55 2011 -0600 

    3rd branch commit 

commit 7d651d05344ba6e2cd18d8e24c0c350d0c7dec66 
Author: Joe User <[email protected]> 
Date: Sat Dec 17 15:10:44 2011 -0600 

    second branch commit 

commit 23deb7093a8565479092ef84142a0e2e7282d213 
Author: Joe User <[email protected]> 

正如你所看到的,散列的最後兩次提交,這是由該補丁創建不同的。現在,也許這是有道理的。當然,由補丁創建的文件的時間戳是不同的。 (我不確定散列中包含哪些信息)

但是,如果是這種情況,我如何驗證我剛應用的補丁包含完全相同的代碼?我怎麼知道發給我的補丁文件沒有做出任何惡意更改?

還是我犯了一個錯誤,導致了不同的散列,如果我做得正確,我會出來相同的散列?

回答

7

默認情況下,git am將提交者日期設置爲當前時間。您可以使用--committer-date-is-author-date標誌來避免這種情況,儘管它可能仍將您設置爲提交者(實際上,它可能會)。您可以通過使用git log --format=fuller來驗證這一點,它也會顯示提交者信息。

+0

試圖添加該標誌git我。沒有效果。哈希值仍然不同。我也是兩種情況下的提交者,所以不是這樣。 – wadesworld 2011-12-18 18:47:28

+2

@wadesworld:看看'git log --format = raw'的輸出。這顯示了原始提交對象。然後,您可以比較它們,看看有什麼不同(無論是作者信息,提交者信息,樹的散列或消息)。 – 2011-12-18 22:24:44

+0

好的,我不知道我在開始這個測試的前幾次搞砸了什麼,但是我刪除了原來的測試版本,然後再次嘗試,現在所有工作都按預期工作。謝謝! – wadesworld 2011-12-20 07:06:00

相關問題