2011-06-14 11 views
110

gitはすべてのコミットの中で、あるユーザによって変更されたすべてのファイルのリストを私に与えたいと思います。gitを使って、あるユーザが変更したすべてのファイルを教えてもらえますか?

私は、Ruby on Railsプロジェクトのi18nに関わってきました。私たちは、どのファイルがすでに実行され、どのファイルがまだ必要かを知りたいと思います。問題のユーザーは、コードベースの残りの部分ではなく、i18nでの作業しか完了していません。だから情報はすべてgitにあるはずですが、私はそれをどうやって消すのか分かりません。

答えて

82

これが唯一の方法ではありませんが、それは動作します:1行として、

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

+29

猫の皮膚には常に複数の方法があります。これが私の頭の上から出てきたもので、それはうまくいった。効率はあまり重要ではありません。とにかくdownvoteありがとう。 –

+2

私はちょうど数千のコミットでこれをレポで使用しました。 – Jake

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

+1

@Jonah --pretty = format: ""が必要です。私は答えを編集しました。 –

+1

はうまく動作しますが、出力の始めにブランクのリンクが生成されます。つまり、結果を 'wc -l'でパイプしてファイル数を取得すると、その値は1になります。 – joachim

関連する問題