デフォルトの git diff の動作は、各 diff ファイルを順番に開くことです (次のファイルを開く前に、前のファイルが閉じられるのを待ちます)。
すべてのファイルを一度に開く方法を探しています。たとえば、BeyondCompare では、同じ BC ウィンドウ内のタブですべてのファイルが開きます。
これにより、複雑な一連の変更を簡単に確認できます。差分ファイル間を前後にフリックして、重要でないファイルを無視します。
v1.7.11以降では、を使用してディレクトリ差分を実行git
できます。git difftool --dir-diff
この機能は、たとえばMeld 3.14.2でうまく機能し、変更されたすべてのファイルを参照できます。
git difftool --dir-diff --tool=meld HEAD~ HEAD
これは便利なBash関数です。
git-diff-meld() (
git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}"
)
次の答えはgit
、v1.7.11より古いインストールに適用されます。
これと同じ質問がgitメールリストで行われました。
任意のコミット間でディレクトリ差分を実行するその電子メールスレッドに基づくシェルスクリプトをまとめました。
git v1.7.10以降、git-diffall
スクリプトはcontrib
標準のgitインストールに含まれています。
v1.7.10より前のバージョンの場合、GitHubgit-diffall
のプロジェクトからインストールできます。
プロジェクトの説明は次のとおりです。
git-diffallスクリプトは、git用のディレクトリベースのdiffメカニズムを提供します。スクリプトは、diff.tool構成オプションに依存して、使用されているdiffビューアーを判別します。
このスクリプトは、diffのリビジョンの範囲を指定するために使用されるすべてのフォームと互換性があります。
1)
git diffall
:作業ツリーと段階的変更の差分を表示
2)git diffall --cached [<commit>]
:段階的変更とHEAD
(または他の名前付きコミット)の差分を表示
3)git diffall <commit>
:作業ツリーと名前付きコミットの差分を表示
4)git diffall <commit> <commit>
:2つの名前付きコミットの差分を表示
5)git diffall <commit>..<commit>
:同じ上記のように
6)git diffall <commit>...<commit>
:両方の共通の祖先から開始して、2番目までを含むブランチの変更を表示します<commit>
注:すべてのフォームはオプションのパスリミッターを使用します
[--] [<path>]
このスクリプトは、GitリストのThomasRastによって提供された例に基づいています。
ここに私が落ち着いたものがあります...
git-diffall
次のコードを(拡張子なし)という名前のファイルにコピーします。
#!/bin/sh
git diff --name-only "$@" | while read filename; do
git difftool "$@" --no-prompt "$filename" &
done
ファイルをcmd
git インストール ディレクトリのフォルダーに配置します (例: C:\Program Files (x86)\Git\cmd
) 。
そして、あなたがするように使用してくださいgit diff
:
git diffall
git diffall HEAD
git diffall --cached
git diffall rev1..rev2
etc...
注: その鍵となるのは、ファイルがすぐに処理されるように、バックグラウンド タスクで実行するように外部 diff コマンドに指示する&パラメーターです。BeyondCompare の場合、これにより 1 つの画面が開き、各ファイルがそれぞれのタブに表示されます。
meld
ソース管理下のディレクトリ (Git、Mercurial、Subversion、Bazaar など) を指定すると、変更されたすべてのファイルが自動的に一覧表示され、ダブルクリックして個々の違いを表示できるという優れた機能があります。
IMOmeld .
は、VCSを起動するように構成するよりも、入力してVCSを把握する方がはるかに簡単meld
です。さらに、プロジェクトで使用している VCS に関係なく、同じコマンドを使用できます。これは、頻繁に切り替える場合に便利です。
唯一の欠点は、meld が git/hg/svn から変更を渡すよりも変更をスキャンするのが遅いことですが、問題になるほど遅いかどうかは、使用方法によって異なります。
git meld
=> https://github.com/wmanley/git-meldは、単一のウィンドウですべてのファイルのきちんとした diff を開く素晴らしいスクリプトです。
Diffuseには VCS 統合もあります。SVN、Mercurial、Bazaar など、他の多数の VCS と相互運用できます。Git の場合、すべてではなく一部の変更がステージングされると、3 つのペインが表示されます。競合が発生した場合は、4 つのペインも表示されます。
で呼び出します
diffuse -m
Git 作業コピーで。
あなたが私に尋ねると、私が10年間見た中で最高のビジュアル違い. (メルドも試しました。)
Araxis Merge には「-nowait」コマンド オプションがあることに注意してください。
-nowait 比較が閉じられるのを待たないようにします。
多分これはすぐに終了コードを返し、うまくいくでしょう、誰もこれを経験しましたか? BeyondCompare の同様のオプションが見つかりません...
2 つの作業ツリーを複製し、DiffMerge と比較する powershell スクリプトを作成しました。したがって、次のことができます。
GitNdiff master~3 .
たとえば、3 チェックイン前の master ブランチと現在の作業ツリーを比較するには、次のようにします。
その光沢があり、新しく、おそらくバグでいっぱいです。1 つの欠点は、まだ追加されていない作業ツリー内のファイルが両方の作業ツリーにコピーされることです。遅い場合もあります。
現在変更されているすべてのファイルを開くだけの場合は、次のようにしてください。
vi $(git status | sed -n '/.*modified: */s///p')
「複雑な一連の変更」をコミットしている場合は、ワークフローを再検討することをお勧めします。git の非常に優れた機能の 1 つは、開発者が複雑な変更セットを一連の単純なパッチに簡単に削減できることです。現在変更されているすべてのファイルを編集しようとするのではなく、
git add --patchこれにより、ハンクを選択的にステージングできます。
Mac OS X で Araxis を使用して git-diffall を使用することに興味がある人のために、github で git-diffall プロジェクトをフォークし、Araxis Merge コマンドをラップする AppleScript を追加しました。注: これは、araxisgitdiff
Araxis Merge for Mac OS X に同梱されているファイルのわずかに変更されたクローンです。
gitkを使用して、すべての違いを同時に確認できます