2012-02-16 9 views
4

いくつかの条件に一致するコミットで変更されたすべてのファイルを取得したいとします。だから私は次のようにしている:git log --grep=123、私は集約リストとしてそのコミットで変更されたファイルを取得する必要があります。ファイルが複数のコミットで変更された場合は、結果リストに1回だけ含める必要があります。いくつかのコミットでgit list changed filesを

git log --grep=pattern --name-only --pretty=format:'' | sort -u 

答えて

5

git logは、スクリプトのために使用すべきではないコミットが、ここで迅速な解決策があります示しています正確な答えが、あなたの状態がスタートし、一貫性のあるコミットシリーズのgitの端の位置を支援する準備ができている場合:なぜ `Gitのlog`をスクリプトに

git diff --name-only <SHA, tag start> <SHA, tag end>

+1

を使用すべきではありませんか? –

+2

人間の消費者向けのいわゆる磁器コマンドであるのに対し、配管コマンドはマシンの消費(スクリプト)用に提供されるためです。上記の行を正しく書くためには、 'git rev-list'や' git diff-tree'などを使うべきです... – knittl

+0

@knittl:私はそれに完全に同意しません。 'git status'が悪いが' git status --porcelain'が良いのと同じように、 'git-log'は出力フォーマットを注意深く制御するならスクリプト*に使うのがかなり妥当です。 'git rev-list ... 'を実行し、単に' git log ... --format = ... 'を使用するのではなく、' git show --format = ... 'を使ってループすることをお勧めしますか? – Cascabel

0

ない:それは亀のsvnログウィンドウで複数のコミットを選択するようなもので、それは選択で変更されたすべてのファイルが

関連する問題