12

git diff --name-status2 つのコミット間で変更/追加/削除/名前変更/コピーされたファイルを追跡するために使用していますが、うまく機能します。

ここで、ファイルfile1を に移動しnewdir/file1、コミットしてから git diff を実行すると、次のようになります。

$ git diff --name-status -C HEAD~1 HEAD
R100    file1    newdir/file1

指定されたディレクトリ内の変更のリストに制限するが、その子には制限しないように git に依頼する方法はありますか? newdirルート ディレクトリとディレクトリの両方の正確な変更を個別に知りたいです。の場合newdirは簡単です。

$ git diff --name-status -C HEAD~1 HEAD -- newdir
A       newdir/file1

…しかし、ルート ディレクトリで「補足的な」差分情報を取得するにはどうすればよいですか? つまり、この出力:

$ git diff ???
D       file1

-C同じディレクトリ内の名前変更とコピーを検出するオプションを保持したいことに注意してください。

4

3 に答える 3

1

私はそれがおそらくgitで実行可能であることを知っていますが、 patchutilsのfilterdiff/grepdiffプログラムを使用したくなるでしょう。このようなものは問題なく動作するはずです。

git diff -C .... | filterdiff --clean -x '*/*/**'
于 2011-05-25T18:59:19.707 に答える
1

それをgrepに渡します:

git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$

これにより、サブディレクトリを含むものはすべて除外されます。より深いものから何かを取得する必要がある場合は、次のようにします。

git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$

必要に応じて、これに簡単にエイリアスを付けることができます。

于 2011-06-25T23:36:18.130 に答える
0

使用可能なLinux または互換シェルを実行している場合findは、 を使用findして、現在の (または他の) ディレクトリにディレクトリ以外のファイルのリストを生成し、それを にフィードできますgit diff

git diff --stat --other-git-diff-args -- $(find . -type f -depth 1 -print0 | tr '\0' ' ')
于 2019-12-01T05:27:34.853 に答える