2011-05-25 105 views
10

我使用git diff --name-status來追蹤哪些文件在兩次提交之間被修改/添加/刪除/重命名/複製,並且效果很好。如何限制git-diff到一個目錄而沒有子目錄?

現在假設我移動文件file1newdir/file1,提交,然後運行git的差異,我得到這個:

$ git diff --name-status -C HEAD~1 HEAD 
R100 file1 newdir/file1 

有沒有辦法讓git的把自己侷限到裏面給定的更改列表目錄但不是它的孩子?我想單獨瞭解根目錄和newdir目錄的確切更改。對於newdir,很容易:

$ git diff --name-status -C HEAD~1 HEAD -- newdir 
A  newdir/file1 

...但我怎麼能獲得在根目錄下的「互補」 DIFF信息?即,此輸出:

$ git diff ??? 
D  file1 

注意,我想保持-C選項來檢測在同一目錄中重命名和複製。

回答

1

把它傳遞到grep:

git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$ 

這將過濾掉任何包含子目錄的內容,如果您需要從更深層次獲得更多內容,請執行以下操作:

git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$ 

如果你願意,你可以很容易地別名。

+0

'git diff .. - '爲我工作。 – sholsinger 2014-02-11 20:30:04

1

我知道它在Git中可能是可行的,但我會受到誘惑而使用filterdiff/grepdiff計劃從patchutils這樣的事情應該通過好的工作

git diff -C .... | filterdiff --clean -x '*/*/**' 
+0

'git diff --name-status'的輸出不是一個補丁文件,而是一個修改過的文件列表,所以看起來像'filterdiff'沒有幫助。 – 2011-05-26 07:29:23

相關問題