2017-09-20 21 views
2

私はbashウィンドウのタグにgit diffを使用しています。git diff出力はファイル名だけです

この出力を与える
$ git diff -- numstat TAG2 TAG1 

4 6 dir1/dir2/dir3/dir4/thisIsMyFile.cs 

どのように私はこの出力を得ることができます。

4 6 thisIsMyFile.cs 

私は(ファイル名のみ、パス(dir1/dir2/dir3/dir4/)欲しい/必要はありません。 thisIsMyFile.cs)。

+0

忘れてしまったのは、TAGでdiffを実行しているため、パスにさまざまなディレクトリが存在する多数のファイルが見つかります。すべての行で、私はまだファイル名が必要です。 はこれを取得: 4 6 thisIsMyFile1.cs 22: 4 6 DIR1/DIR2/DIR3/DIR4/thisIsMyFile1.cs 22 12 DIR1/DIR2/thisIsMyFile2.cs 8 2 DIR1/thisIsMyFile3.cs はこれが欲しいです12 thisIsMyFile2.cs 8 2 thisIsMyFile3.cs – user8644501

答えて

1

あなたはawkを使用することができます。

git diff --numstat | awk -F'[/\t]' '{print $1,$2,$NF}' 

awkコマンドが何をしているのですか?

-F'[/\t]'は、フィールド区切り文字をタブまたは/に設定します。 (gitからの出力はタブ区切りです)。 $NFは、の最後のフィールドで、ファイル名です。


注:ファイル名にタブが含まれている場合、上記のコマンドは失敗します。あなたがその制限で暮らすことができるなら、楽しみましょう!

2

私が知る限り、Gitだけでこれを行う方法はありません(つまり、Git diffに正しい引数を与えるだけです)。 Gitの出力を後処理するには、Bashパイプラインを使用する必要があります。私はお勧め:元の書式を保持し、それらのタブまたはスペースを持つファイルがある場合でも、正しく解析するように設計されているため

git diff --numstat TAG2 TAG1 | while IFS= read -r line; do 
    printf '%s\t' "$(cut -f-2 <<<"$line")" 
    basename "$(cut -f2- <<<"$line")" 
done 

これはもう少し複雑です。ファイル名に空白がないことを保証できる場合や、Bashよりも強力なスクリプト言語を使用して行を解析することに興味がある場合は、単純化することができます。

0

使用ベース名-a $(TAG1のTAG2 --numstat Gitの差分)

NOTE私は、サブコマンドを実行するには、bashの構文を使用しています。

関連する問題