266

デフォルトの git diff の動作は、各 diff ファイルを順番に開くことです (次のファイルを開く前に、前のファイルが閉じられるのを待ちます)。

すべてのファイルを一度に開く方法を探しています。たとえば、BeyondCompare では、同じ BC ウィンドウ内のタブですべてのファイルが開きます。

これにより、複雑な一連の変更を簡単に確認できます。差分ファイル間を前後にフリックして、重要でないファイルを無視します。

4

12 に答える 12

239

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によって提供された例に基づいています。

于 2010-04-30T17:04:00.173 に答える
64

ここに私が落ち着いたものがあります...

git-diffall次のコードを(拡張子なし)という名前のファイルにコピーします。

#!/bin/sh
git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

ファイルをcmdgit インストール ディレクトリのフォルダーに配置します (例: C:\Program Files (x86)\Git\cmd) 。

そして、あなたがするように使用してくださいgit diff

git diffall
git diffall HEAD
git diffall --cached 
git diffall rev1..rev2
etc...

注: その鍵となるのは、ファイルがすぐに処理されるように、バックグラウンド タスクで実行するように外部 diff コマンドに指示する&パラメーターです。BeyondCompare の場合、これにより 1 つの画面が開き、各ファイルがそれぞれのタブに表示されます。

于 2009-08-18T03:04:30.110 に答える
23

meldソース管理下のディレクトリ (Git、Mercurial、Subversion、Bazaar など) を指定すると、変更されたすべてのファイルが自動的に一覧表示され、ダブルクリックして個々の違いを表示できるという優れた機能があります。

IMOmeld .は、VCSを起動するように構成するよりも、入力してVCSを把握する方がはるかに簡単meldです。さらに、プロジェクトで使用している VCS に関係なく、同じコマンドを使用できます。これは、頻繁に切り替える場合に便利です。

唯一の欠点は、meld が git/hg/svn から変更を渡すよりも変更をスキャンするのが遅いことですが、問題になるほど遅いかどうかは、使用方法によって異なります。

于 2010-11-16T07:01:41.217 に答える
3

私はこのメソッド(GitDiff.batとGitDiff.rb)を見つけました。このメソッドは、ファイルを古い/新しい一時ディレクトリにコピーしてから、フォルダーを比較します。

ただし、BeyondCompareには、diffウィンドウ内からファイルを編集できる便利な機能があり、迅速なクリーンアップに最適であるため、作業ファイルを(作業ディレクトリから)直接表示したいと思います。

編集:gitメーリングリストの私の質問に答えて、ここで同様の方法。

于 2009-08-03T00:58:14.233 に答える
3

git meld=> https://github.com/wmanley/git-meldは、単一のウィンドウですべてのファイルのきちんとした diff を開く素晴らしいスクリプトです。

于 2011-10-18T05:26:03.813 に答える
2

Diffuseには VCS 統合もあります。SVN、Mercurial、Bazaar など、他の多数の VCS と相互運用できます。Git の場合、すべてではなく一部の変更がステージングされると、3 つのペインが表示されます。競合が発生した場合は、4 つのペインも表示されます。

ステージ編集とステージ編集なしの拡散反射光のスクリーンショット

で呼び出します

diffuse -m

Git 作業コピーで。

あなたが私に尋ねると、私が10年間見た中で最高のビジュアル違い. (メルドも試しました。)

于 2012-10-24T21:18:56.250 に答える
2

Araxis Merge には「-nowait」コマンド オプションがあることに注意してください。

-nowait 比較が閉じられるのを待たないようにします。

多分これはすぐに終了コードを返し、うまくいくでしょう、誰もこれを経験しましたか? BeyondCompare の同様のオプションが見つかりません...

于 2009-08-04T04:10:34.150 に答える
1

2 つの作業ツリーを複製し、DiffMerge と比較する powershell スクリプトを作成しました。したがって、次のことができます。

GitNdiff master~3 .

たとえば、3 チェックイン前の master ブランチと現在の作業ツリーを比較するには、次のようにします。

その光沢があり、新しく、おそらくバグでいっぱいです。1 つの欠点は、まだ追加されていない作業ツリー内のファイルが両方の作業ツリーにコピーされることです。遅い場合もあります。

http://github.com/fschwiet/GitNdiff

于 2010-07-01T16:09:14.377 に答える
1

現在変更されているすべてのファイルを開くだけの場合は、次のようにしてください。

vi $(git status | sed -n '/.*modified: */s///p')

「複雑な一連の変更」をコミットしている場合は、ワークフローを再検討することをお勧めします。git の非常に優れた機能の 1 つは、開発者が複雑な変更セットを一連の単純なパッチに簡単に削減できることです。現在変更されているすべてのファイルを編集しようとするのではなく、

git add --patch
これにより、ハンクを選択的にステージングできます。

于 2009-08-11T11:30:06.493 に答える
1

Mac OS X で Araxis を使用して git-diffall を使用することに興味がある人のために、github で git-diffall プロジェクトをフォークし、Araxis Merge コマンドをラップする AppleScript を追加しました。注: これは、araxisgitdiffAraxis Merge for Mac OS X に同梱されているファイルのわずかに変更されたクローンです。

https://github.com/sorens/git-diffall

于 2011-02-17T10:54:37.797 に答える
-2

gitkを使用して、すべての違いを同時に確認できます

于 2009-08-11T02:50:41.720 に答える