2011-06-14 51 views
110

我想讓git給我一個所有提交中由一個用戶修改的文件列表。我可以讓git告訴我一個用戶修改過的所有文件嗎?

我特別的用例是我參與了Ruby on Rails項目的國際化,我們想知道哪些文件已經完成,哪些文件還需要完成。有問題的用戶只完成了國際化的工作,而不是其他代碼庫。所以這些信息都應該在git中,但我不知道如何解決。

回答

82

這是不是唯一的方法,但它的工作原理:

git log --pretty="%H" --author="authorname" | 
    while read commit_hash 
    do 
     git show --oneline --name-only $commit_hash | tail -n+2 
    done | sort | uniq 

或者,就像一條線:

git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq 
+2

這是非常低效的。在循環中調用git是不必要的,請參閱下面的答案。 – h0tw1r3 2011-06-14 20:34:32

+29

總有不止一種方法來給貓換膚。這是我從頭頂上想出來的,並且工作起來。效率在這裏並不重要。無論如何感謝downvote。 – 2011-06-14 20:39:08

+2

我剛剛在有數千次提交的回購中使用了它,它是瞬間的。 – Jake 2015-07-05 07:11:05

5

嘗試git log --stat --committer=<user>。只需將用戶名放在--committer=選項上(或酌情使用--author=)即可。

這將會提交所有的提交文件,所以可能會有一些重複。

137

這會給你的文件的一個簡單的列表,沒有別的:

git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u 

根據需要切換 - 作者--committer。

+1

'--name-only'似乎只是輸出文件名。鑑於這個事實,有什麼選擇'--stat'和'--pretty = format:「」'完成?你能把它們留下嗎? – Jonah 2015-04-10 21:20:27

+1

@Jonah --pretty = format:「」是必要的。我編輯了答案。 – 2016-09-07 05:16:31

+1

效果很好,雖然只有一個小故障:它在輸出開始時會產生一個空白鏈接,這意味着通過'wc -l'來獲得文件數量的結果是1。 – joachim 2018-01-31 14:59:08

相關問題