27

サーバー上で Git リポジトリを使用して、サーバーに送信されるユーザー データ ファイルのバージョンを管理しています。2 つのリビジョン間で変更されたファイルのリストを取得することに興味があります。

については知ってgit diff --name-only <rev1> <rev2>いますが、これではファイル名のリストしか表示されません。名前の変更とコピーにも特に興味があります。理想的には、出力は次のようになります。

updated:  userData.txt
renamed:  picture.jpg -> background.jpg
copied:   song.mp3 -> song.mp3.bkp

出来ますか?--name-statusまた、名前の変更とコピーを示していないようです。

4

2 に答える 2

32
git diff --name-status -C <rev1> <rev2>

あなたが探しているものに近いはずです。

--name-statusファイル名とそれぞれのステータスが表示されます。

(A|C|D|M|R|T|U|X|B)

追加(A)、コピー(C)、削除(D)、変更(M)、名前変更(R)、
タイプ(つまり、通常のファイル、シンボリックリンク、サブモジュールなど)変更(T)、
マージされていない(U)、不明(X )、またはペアリングが壊れています(B)

OP Jean Philippe Pelletが追加します:

ステータス文字RC「移動またはコピーのソースとターゲットの間の類似性のパーセンテージを示すスコアが常に続き、そうなるのは唯一のスコアです」。)

コピーまたは移動されたファイルについて:

-C[<n>]
--find-copies[=<n>]

コピーと名前変更を検出します。を指定するnと、と同じ意味になり-M<n>ます。

--find-copies-harder

パフォーマンス上の理由から、デフォルトでは、-Cオプションは、コピーの元のファイルが同じチェンジセットで変更された場合にのみコピーを検索します。
このフラグにより​​、コマンドは変更されていないファイルをコピー元の候補として検査します。
これは大規模なプロジェクトでは非常にコストのかかる操作であるため、注意して使用してください。複数の-Cオプションを指定しても同じ効果があります。


braulioboはコメントでお勧めします:

git diff --stat -C
git show --stat -C
git log --stat -C
于 2011-05-19T11:48:35.320 に答える
3

私は「その情報が表示されると信じています

git diff -M -C --stat
于 2011-05-19T11:47:01.627 に答える