2012-02-21 18 views
2

私は、何を再調整するかを知るために変更されたすべてのjsファイルのリストを取得しようとしています。bashスクリプトでgit whatchangedからファイル名を抽出する

は、私が以前に

はこれまでのところ、これは私が思いついた最高のですが、それは本当に危険な感じthis質問をしました。

GITCHANGES=$(git whatchanged -n 1 --pretty=format:) 
I=0; 
for f in $GITCHANGES; 
do 
    I=$(($I + 1)); 
    if [[ $(($I % 6)) == 0 ]]; then 
     echo "$f" 
    fi 
done 

しかし、これは私のすべての変更されたファイル(phpcssjs)だけでなくjsファイル

どのように私は、JSファイルにはなるだろうを与えますか?これを達成するための良い方法がありますか?

+0

あなたは単にあなたが縮小化するとき多分あなたは修正のタイムスタンプを記録する必要があります(あなたがドットファイルにリストを保つことができる)だけreminifyingを必要とするものを見るために、そのファイルを参照してください、ファイルをreminifyしようとしている場合。 –

+0

ところで、 'git whatchanged -n 1 --pretty = format:'からのあなたの出力は基本的に 'git diff-tree HEAD^HEAD'と同じことをしています。 '--name-only'フラグを渡します。 –

+0

[gitでコミットするすべてのファイルを表示するにはどうすればいいですか?](http://stackoverflow.com/questions/424071/how-do-i-list-all-the-files-for-a-commit -in-git) – Schwern

答えて

3

this answerより、変更されたファイルのリストを取得するにはgit show --pretty="format:" --name-only HEAD^を使用してください。その後、それをgrepに通してください。

git show --pretty="format:" --name-only HEAD^ | grep '\.js$' 
+0

' git whatchanged -n 1 --pretty = format:-name-only | grep '\ .js $' ' – qwertymk

+0

@qwertymkうん、うまくいく。最後のコミットを 'git log'で選択します。そうでなければ、' HEAD^'はマージの間違った側に落ちるかもしれません。ところで、私はあなたが上記を参考にしていた答えを誤解しました、申し訳ありません。 – Schwern

1

スクリプトはこれがHEAD^(最初の親)とHEAD間で異なるすべての.jsファイルのリストを吐くだろう単に

git diff-tree --name-only HEAD^ HEAD | grep '\.js$' 

に本当に凝縮させることができます。

+0

'diff-tree'は、ファイルではなく変更されたディレクトリを返します。少なくとも私のテストによるとは限りません。 – Schwern

+0

私はdiff-treeに '-r'が必要だと思います。 – Schwern

+0

また、誤ってスクリプトによってファイル名とみなされる可能性があるコミットIDを出力します。最初の行をGNUismである 'tail -n + 2'で削除するか、' sed'で何かをまとめる必要があります。 – Schwern