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