2011-05-19 31 views
20

我在我的服務器上使用Git存儲庫來發送到服務器的版本用戶數據文件。我有興趣獲得任何兩個修訂版之間更改的文件列表。在Git中,如何獲得從一個修訂版到另一個修訂版的文件更改的詳細列表?

我知道關於git diff --name-only <rev1> <rev2>,但這隻給我一個文件名列表。我特別對重命名和副本感興趣。理想情況下,輸出將是這樣的:

updated: userData.txt 
renamed: picture.jpg -> background.jpg 
copied: song.mp3 -> song.mp3.bkp 

這可能嗎? --name-status也似乎不表示重命名和副本。

回答

26
git diff --name-status -C <rev1> <rev2> 

應該是更接近你在找什麼。

--name-status將顯示中的文件名和它們各自的狀態:

(A|C|D|M|R|T|U|X|B) 

加(A),複製(C),刪除(d),改良(M),重命名(R),
類型(即常規文件,符號連接,子模塊,...)改變(T),
取消合併(U),未知(X),或配對破碎(B)

(賦予了OP Jean Philippe Pellet補充說:

狀態字母RC「是始終遵循一個分數,表示移動或複製的源和目標之間的相似率,並且是唯一如此」。 )

複製或移動文件關於:

-C[<n>] 
--find-copies[=<n>] 

檢測副本以及重命名。如果指定了n,則其含義與-M<n>相同。

--find-copies-harder 

出於性能的考慮,默認情況下,-C選項查找僅如果複製的原始文件相同的變更修改副本。
此標誌使命令檢查未修改的文件作爲複製源的候選項。
對於大型項目,這是一項非常昂貴的操作,因此請謹慎使用。給予多個-C選項具有相同的效果。


brauliobo建議in the comments

git diff --stat -C 
git show --stat -C 
git log --stat -C 
+1

太棒了,這正是我需要的。爲了完整起見,我會補充一下,狀態字母「R」和「C」後面總是跟着一個表示移動或複製的源和目標之間的相似百分比的分數,並且是唯一的那樣「([source](http://www.kernel.org/pub/software/scm/git/docs/git-diff.html))。 – 2011-05-19 11:59:34

+0

@讓 - 菲利普:好點。我已經將它包含在答案中。 – VonC 2011-05-19 12:33:27

+0

謝謝!剩下的部分是如何解釋類​​型爲「X」或「B」的條目...... – 2011-05-19 12:41:54

3

我相信``將顯示信息

git diff -M -C --stat 
+0

謝謝!看起來'-M'是多餘的,因爲'-C'檢測到「拷貝以及重命名」,而'--stat'在指定'-C'時似乎沒有效果。 – 2011-05-19 12:02:42

+1

好得多,也可以使用'show'和'log'。謝謝! – brauliobo 2015-11-05 16:20:45

相關問題