デフォルトのgit diffの動作は、各diffファイルをシリアルで開くことです(前のファイルが閉じるのを待ってから、次のファイルを開きます)。
すべてのファイルを一度に開く方法を探しています-たとえばBeyondCompareでは、同じBCウィンドウ内のタブですべてのファイルを開きます。
これにより、複雑な一連の変更を簡単に確認できます。diffファイル間を前後にフリックして、重要でないファイルを無視します。
デフォルトのgit diffの動作は、各diffファイルをシリアルで開くことです(前のファイルが閉じるのを待ってから、次のファイルを開きます)。
すべてのファイルを一度に開く方法を探しています-たとえばBeyondCompareでは、同じBCウィンドウ内のタブですべてのファイルを開きます。
これにより、複雑な一連の変更を簡単に確認できます。diffファイル間を前後にフリックして、重要でないファイルを無視します。
回答:
以降ではgit
v1.7.11、あなたが使用することができ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より前のバージョンの場合git-diffall
、GitHubのプロジェクトからインストールできます。
ここにプロジェクトの説明があります:
git-diffallスクリプトは、ディレクトリベースのgitの差分メカニズムを提供します。スクリプトは、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リストでThomas Rastが提供した例に基づいています。
git difftool --dir-diff
およびBeyond Compare について):Scooter Software(Beyond Compareの作成者)に問い合わせbcompare.exe
たところ、これはサポートされているソリューションではなく、同時に複数の差分が開いていると問題が発生する可能性があるとのことです。bcomp.exe
将来のバージョンでは、フォルダーの差分のサポートを追加する予定です(当面はbcompare.exe
、サポートされない回避策として引き続き使用します)。
--dir-diff
はメルドで完璧に動作すると言うためにコメントするだけです。そこから、個々のファイルの差分を選択して表示できます。
これが私が解決したものです...
次のコードを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...
注:その鍵となるのは& paramで、外部のdiffコマンドにバックグラウンドタスクで実行してファイルをすぐに処理するように指示します。BeyondCompareの場合、これにより、1つの画面が開き、各ファイルが独自のタブに表示されます。
"$filename"
ました"../$filename"
。その後、Beyond Compare
git-diffall
ファイルをC:\Program Files\Git\cmd
フォルダーに追加した後、Windowsを再起動する必要がありますか?私は指示されたとおりに行いましたが、実行すると $ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
meld
ソース管理下のディレクトリ(Git、Mercurial、Subversion、Bazaarなど)を指定すると、変更されたすべてのファイルが自動的に一覧表示され、ダブルクリックして個々の違いを表示できるという便利な機能があります。
IMOはmeld .
、VCSを起動するように構成するよりも、入力してVCSを理解する方がはるかに簡単meld
です。さらに、プロジェクトで使用しているVCSが何であっても同じコマンドを使用できます。これは、それらを頻繁に切り替える場合に便利です。
唯一の欠点は、meldが変更をスキャンするのがgit / hg / svnから変更を渡すよりも遅いことですが、問題になるほど遅いかどうかは、それをどのように使用しているかによって異なります。
git diff
してください。これは提供されていません。
git meld
=> https://github.com/wmanley/git-meldは、すべてのファイルのきちんとした差分を1つのウィンドウで開く素晴らしいスクリプトです。
Araxis Mergeには '-nowait'コマンドオプションがあることに注意してください。
-nowaitは、compareが比較が終了するのを待つのを防ぎます。
多分これはすぐに終了コードを返し、うまくいくでしょう、誰もがこれを経験しましたか?BeyondCompareの同様のオプションが見つかりません...
DiffuseにはVCSも統合されています。SVN、Mercurial、Bazaarなど、他の多数のVCSと相互運用します。Gitの場合、すべてではないが一部の変更がステージングされると、3つのペインが表示されます。競合が発生した場合は、4つのペインが表示されます。
で呼び出す
diffuse -m
あなたのGit作業コピーに。
あなたが私に尋ねると、私が10年間見てきた中で最高のビジュアルは異なります。(そして私もmeldを試しました。)
あなたがしたいすべてが現在変更されているすべてのファイルを開くことである場合、次のようなことを試してください:
vi $(git status | sed -n '/.*modified:* / s /// p')
「複雑な一連の変更」をコミットする場合は、ワークフローを再検討する必要があります。gitの非常に優れた機能の1つは、開発者が複雑な変更セットを一連の単純なパッチに簡単に削減できることです。現在変更されているすべてのファイルを編集しようとするのではなく、
git add --patchこれにより、ハンクを選択的にステージングできます。
2つの作業ツリーを複製してDiffMergeと比較するPowerShellスクリプトを作成しました。だからあなたはできる:
GitNdiff master~3 .
たとえば、3回前のマスターブランチと現在の作業ツリーを比較します。
その光沢があり、新しく、おそらくバグがたくさんあります。1つの欠点は、まだ追加されていない作業ツリー内のファイルが両方の作業ツリーにコピーされることです。遅くなることもあります。
Mac OS XでAraxisを使用してgit-diffallを使用することに関心がある人のために、githubでgit-diffallプロジェクトをforkし、Araxis MergeコマンドをラップするAppleScriptを追加しました。注:これは、araxisgitdiff
Mac OS XのAraxis Mergeに同梱されているファイルのわずかに変更されたクローンです。