2012-07-12 69 views
2

我知道git會跟蹤內容並在內容上部分生成一個sha。但是,沙也是基於父提交。 當我重新分支分支時,因爲我的提交現在有不同的祖先,所有提交都有不同的shas。有沒有辦法檢查兩個不同的git提交內容是否相等?

但我在想什麼,有沒有辦法比較兩個提交(或提交範圍),看看是否內容明智,他們是一樣的? 這也應該能夠判斷一個二進制變化是否相同。

我在想如果有一些方法可以獲得內容的sha,而不需要將祖先信息合併起來,那麼可以這樣做。

感謝任何和所有的幫助,

+1

http://stackoverflow.com/questions/1191282/git-diff-commits-difference – 2012-07-12 19:19:55

回答

1

提交標頭包含用於樹對象,它是文件系統的內容(內容+結構)的SHA。編寫腳本來比較這些腳本不會太難。

Blob也有ID,所以如果您只是查看一個或兩個文件,您可以比較這些ID。

+0

不幸的是,我不知道這是非常正確的(至少在樹上)。基本上,當我查看提交樹樹時,即使該分支只是重新分區(文件沒有任何更改),它也會更改。 – 2012-07-13 20:59:55

+0

樹ID可以通過目錄中的某些其他blob更改以某種方式更改。如果你所要做的只是比較兩個斑點之間的差異,那麼你必須編寫某種類型的代碼來解壓縮斑點,去掉頭部,然後散列剩下的部分,以便進行所需的比較。當然,你可以做'git log A..B - path'並且省去麻煩。 – 2012-07-14 03:54:20

5

您希望--cherry-mark選項能夠在其補丁內容相同時,對哪些標記提交等號並進行git記錄。

git log --decorate --graph --oneline --cherry-mark --boundary A...B 

是重訂基期支路B與原分公司答:我用這個來檢查,我提交使用Git TFS仍然正常,一旦TFS已經在他們提出比較的好方法。

+0

嗯...這一個似乎是最有前途的,除了一些我無法弄清楚的事情。第一個是,你如何擁有一個重新設計的分支B和一個原始分支A?你正在創建一個備份分支還是產生一個新分支?在我的情況下,我只是重新綁定了master上的現有分支。第二個是在我的二進制文件中,即使它們的校驗和完全相同,它將提交標記爲不等價。有沒有我失蹤的一塊? – 2012-07-12 22:13:47

+0

哪個版本的git與--cherry-mark一起使用?我沒有找到我安裝的東西。 – 2012-08-23 13:38:37

+0

該選項在2011年3月9日提交adbbb31版本中添加到revision.c中,並且存在於git 1.7.5及更高版本中。 (我用git gui blame和git描述了來找到這個)。 – patthoyts 2012-08-23 13:49:00

相關問題