web-dev-qa-db-ja.com

ディレクトリを比較するためのgitdifftool?

Git difftoolコマンドを取得してディレクトリを開き、変更されたファイルとステージング/チェックされたファイルを比較することはできますか?

したがって、理想的には、2つのファイルが変更された場合、それらは2つだけ表示されますが、ディレクトリ内で比較されます。

Gitを取得してすべてのファイル差分を並行して提供することについての投稿を読んだので、BeyondCompareのようなツールにはすべて タブ内の差分 がありますが、それに満足していません!

変更されたファイルのコピーをステージング/チェックインされたファイルから一時フォルダーにプルし、それを開くことができます。それが唯一の選択肢ですか?

32
Ian Vaughan

2012年6月の更新(2年半後):

これ(ファイルごとではなくディレクトリを比較する)はすぐに利用できるようです:
参照 [ANNOUNCE] Git 1.7.11.rc1

"git difftool」は「--dir-diff "のインスタンスを実行する代わりに、2つの一時ディレクトリを設定した後、一度に2つのディレクトリ階層を比較できる外部差分ツールを生成するオプションファイルペアごとに1回の外部ツール

パッチdifftool:ディレクトリの差分を処理するようにdifftoolに教える」を参照してください。


元の回答(2010年1月)

変更されたファイルのコピーをステージング/チェックインされたファイルから一時フォルダーにプルし、それを開くことができます。それが唯一の選択肢ですか?

基本的にはい:

Difftoolスクリプトは次のようになります。

  • 2つの一時ディレクトリを作成します
  • 自分自身を差分ツールとして定義します
  • git diff を呼び出します
    • 次に、ファイルを差分するために自分自身を呼び出します
    • そのモードでは、ファイルごとに同じスクリプトで、2つのバージョンを2つの一時ディレクトリのdiffにコピーするだけです。
  • 次に、2つの一時ディレクトリでdiffツール(beyondCompareやWinMergeなど)を呼び出します。

この質問 に最初の例が1つあります。

44
VonC

私はいつも--dirstat=filesを使用します:

rudie@devver:virenze$ git diff --dirstat=files
   4.1% modules/custom/virenze_conversations/
   7.0% modules/custom/virenze_crs/
   8.3% modules/custom/

つまり、customのdirsvirenze_conversationsvirenze_crsを削除しました。 (パーセンテージの意味がわかりません...)

おそらく、通常のdiffオプションをすべて使用できます:--cached、ブランチ名など。

2
Rudie