希望のdiffツール/ビューアで「git diff」出力を表示するにはどうすればよいですか?


754

私が入力するとgit diff、私は選択の私の差分ツール(Windows上のSourceGearの「diffmerge」)で出力を表示したいです。これを行うようにgitを構成するにはどうすればよいですか?


108
新しいバージョンのgitでは、「git diff」の代わりに「git difftool」を使用できます。これにより、視覚的な差分プログラムが開きます。
PlagueHammer、2009年

:新しいスクリプトdifftoolについては、私は以下の回答追加したstackoverflow.com/questions/255202/...
VonC

2
gitx - gitx.frim.nl。言っ途切れる。
Alex Grande

1
ここにある簡単なチュートリアル:nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
Dmitry Bespalov

5
Git Bashのリポジトリに移動します。と入力しgit config diff.tool winmergeます。と入力して、機能したことを確認しますgit difftool。プロンプトの入力を取り除きますgit config --global difftool.prompt false。winmergeの代わりにp4mergeをお勧めします。
マイケルS.

回答:


386

Git1.6.3以降、git difftoolスクリプトを使用できます以下の私の回答を参照しください。


この記事があなたを助けるかもしれません。ここに最良の部分があります:

外部差分ツールを指定するには、2つの異なる方法があります。

1つ目は、GIT_EXTERNAL_DIFF変数を設定して使用した方法です。ただし、変数は実行可能ファイルの完全パスを指すことになっています。さらに、GIT_EXTERNAL_DIFFで指定された実行可能ファイルは、7つの引数の固定セットで呼び出されます。

path old-file old-hex old-mode new-file new-hex new-mode

ほとんどのdiffツールでは引数の順序が異なる(一部のみ)必要があるため、代わりにラッパースクリプトを指定する必要があります。これにより、実際のdiffツールが呼び出されます。

私が好む2番目の方法は、「git config」を介して外部diffツール構成することです。これが私がしたことです:

1)以下のようなものを含むラッパースクリプト「git-diff-wrapper.sh」を作成します

-->8-(snip)--
#!/bin/sh

# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode

"<path_to_diff_executable>" "$2" "$5" | cat
--8<-(snap)--

ご覧のとおり、2番目(「古いファイル」)と5番目(「新しいファイル」)の引数のみがdiffツールに渡されます。

2)タイプ

$ git config --global diff.external <path_to_wrapper_script>

コマンドプロンプトで、「git-diff-wrapper.sh」へのパスに置き換えて、〜/ .gitconfigに

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

正しい構文を使用して、ラッパースクリプトとdiffツールへのパスを指定してください。つまり、バックスラッシュの代わりにスラッシュを使用します。私の場合、私は持っています

[diff]
    external = \"c:/Documents and Settings/sschuber/git-diff-wrapper.sh\"

.gitconfigと

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

ラッパースクリプト内。末尾の「猫」に注意!

( ' | cat'は、適切または一貫した戻りステータスを返さない可能性がある一部のプログラムにのみ必要だと思います。diffツールが明示的な戻りステータスを持っている場合は、末尾の猫なしで試すこともできます)

Diomidis Spinellisコメントに追加:

catコマンドがあるため、要求されdiff(1)たファイルが異なる場合、エラーコードでデフォルトの終了で。
Gitは、実際のエラーが発生した場合(メモリ不足など)にのみ、外部のdiffプログラムがエラーコードで終了することを期待しています。
出力配管によりgitに対してcat非ゼロのエラーコードをマスクします。
より効率的には、プログラムexitは0の引数を指定して実行できます。)


それ(上記の記事)は、(環境変数ではなく)構成ファイルを通じて定義された外部ツールの理論です。
実際には(まだ外部ツールの構成ファイル定義のため)、以下を参照できます。


1
ああ、私は外部のdiffプログラムを設定しましたが、7つの引数を知りませんでした。
user3891 2008年

4
称賛...これは非常に便利です。私はこれを「opendiff」(Mac OS Xで洗練されたXCode FileMergeユーティリティを起動する)で設定しました。
Ryan Delucchi 09年

@ライアン:それは素晴らしい:)この回答で詳述されている「diff.external」設定、または下の2番目の回答の「git difftool」を使用しましたか?
VonC、2009年

素晴らしい!ありがとう、DiffMergeとopendiffの両方を試してみました。どちらもかなりうまくいきます。
vfilby 2009年

2
gitは7つの引数をdiffプログラムに送信しますか?Gitについて学ぶほど、それは1人の人、つまり元のプログラマーのために作られたものだと感じます。このDVCは、あまり機能しない光沢のあるおもちゃのように見えます。
Cジョンソン

211

以前の「diff.external」構成の回答を完了するには上記の:

以下のようヤクブが言及した、Git1.6.3が導入されたのgit difftoolをもともと2008年9月に提案し、:

USAGE = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
(参照--extcmdこの回答の最後の部分を)

$LOCAL開始リビジョン$REMOTEのファイルの内容が含まれ、終了リビジョンのファイルの内容が含まれます。
$BASEwor内のファイルの内容が含まれています

基本的git-mergetoolにはgit index / worktreeで動作するように変更されています。

あなたがいずれかの上演やunstaged変更し、サイド・バイ・サイド差分ビューアの変化(例えば見てみたいと思いますしている場合は、このスクリプトの通常の使用の場合はxxdifftkdiffなど)。

git difftool [<filename>*]

別の使用例は、同じ情報を見たいが、任意のコミットを比較している場合です(これは、revargの解析がより優れている可能性がある部分です)。

git difftool --start=HEAD^ --end=HEAD [-- <filename>*]

最後の使用例は、現在のワークツリーをHEAD以外のもの(タグなど)と比較する場合です。

git difftool --commit=v1.0.0 [-- <filename>*]

注:Git 2.5以降でgit config diff.tool winmergeは十分です。
git mergetool winmerge」を

また、Git 1.7.11以降--dir-diff、ファイルのペアごとに外部ツールのインスタンスを1回実行する代わりに、2つの一時ディレクトリにデータを入力した後、2つのディレクトリ階層を同時に比較できる外部diffツールを生成するオプションがあります。


Git 2.5より前:

difftoolカスタムdiffツールで構成するための実用的なケース:

C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false

PATHのディレクトリ部分に保存されたwinmerge.shを使用して:

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"

別のツール(kdiff3、P4Diffなど)がある場合は、別のシェルスクリプトと適切な構成difftool.myDiffTool.cmdディレクティブを作成します。
その後、diff.tool設定を使用してツールを簡単に切り替えることができます。

他の詳細を追加するために、Daveによるこのブログエントリもあります。
(または、この質問についてwinmergeuオプション)

この設定の関心はwinmerge.shスクリプトですです。特別な場合を考慮してカスタマイズできます。

例えば参照デビッド大理石下の解答を扱う例に:

  • 起点または終点のいずれかにある新しいファイル
  • 起点または終点で削除されたファイル

以下のようケムメイソンはで言及彼の答え、あなたもすることができます使用して、任意のラッパーを避けるため--extcmdのオプションを

--extcmd=<command>

差分を表示するためのカスタムコマンドを指定します。このオプションを指定git-difftoolすると、構成済みのデフォルトが無視されて実行$command $LOCAL $REMOTEされます。

たとえば、これはどのgitkようにdiffツールを実行/使用できるかです


11
$ LOCALと$ REMOTEが ""と ""になるのを防ぐために、$をエスケープする必要がありました。編集してgit config --globla difftool.winmerge.cmd "winmerge.sh \" \ $ LOCAL \ "\" \ $ REMOTE \ ""
Carlos Rendon

また、このスキームで-sオプション(1つのwinmergeウィンドウで複数のdiffを開く)を機能させる方法はありますか?
カルロスレンドン

1
@Carlos:Frank(上記のコメントを参照)は、stackoverflow.com / questions / 1220309 /…(1つのwinmergeウィンドウで複数のdiffを開く場合)を確認してほしいと思った
VonC

1
--start=および--end=オプションはv1.7.11で認識されていない
マイケル・

1
@SteveChambersはい、私はstackoverflow.com/a/10879804/6309で言及しました。この回答を編集します。
VonC、2018年

110

尋ねられたものとは少し異なる質問に答えるという精神で。この解決策を試してください:

$ meld my_project_using_git

Meldはgitを理解し、最近の変更をナビゲートします。


17
これは素晴らしい方法で、入力するmeld .よりもはるかに簡単で、git difftool変更されたファイルを順番に表示する必要があります。そして、それはMercurialのhg vdiffプラグインに非常に近いです。
トム

6
また、meld .好奇心旺盛な方のために、MercurialおよびSubversionプロジェクトにも対応しています。
トム

うーん、これを行うと、変更されたファイルのリストが表示されます。それらの1つをクリックするか、「比較」すると、別のタブで単独で開きます。どうすれば差分を取得できますか?
misiu_mp

@misiu_mp、試してみたところ、変更されたファイルをクリックすると、差分(古いファイルと変更されたファイル)が表示されます。
db42 11/07/11

これはどのバージョンで追加されましたか?meldバージョンでは動作しないよう1.1.5です。
マークブース

41

新しいgit difftoolを使用すると、これを.gitconfigファイルに追加するだけです。

[diff]
    tool = any-name
[difftool "any-name"]
    cmd = "\"C:/path/to/my/ext/diff.exe\" \"$LOCAL\" \"$REMOTE\""

オプションで、以下も追加します。

[difftool]
    prompt = false

また、それぞれをシリアルで開くという煩わしい(IMO)デフォルトのdiff動作を拡張するために私が作成した単純なスクリプトdiffallも確認してください

Windows上のグローバル.gitconfigは %USERPROFILE%\.gitconfig


1
$ localと$ remoteは何ですか?
Cジョンソン

3
ラッパースクリプトを必要としないメソッドの+1
jhewlett

@CJohnson:元のファイルへのパスと編集されたファイルへのパス。
jhewlett 2013年

ブログリンクダイス場合には、ここにリンクされSOの答えがあります:stackoverflow.com/a/1291578/321973
トビアスKienzler

1
@CJohnson:$ LOCALは常に最新のコミットです。ただし、$ REMOTEは一貫していません。ローカルサンドボックスでの変更を見る場合、それは現在の/編集されたファイルですが、履歴コミットを比較する場合、それはコミットです。通常の差分のIOW $ LOCAL = oldおよび$ REMOTE = new。履歴の場合、$ LOCAL =新しい、$ REMOTE =古い。
グレンジャー、

40

gitバージョン1.6.3以降、お気に入りのグラフィカルdiffツールを使用するように構成できる「git difftool」があります。現在サポートされている標準設定は、kdiff3、kompare、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff、ecmerge、diffuseopendiffです。使用するツールがこのリストにない場合は、いつでも ' difftool.<tool>.cmd'構成オプションを使用できます。

「git difftool」は「git diff」と同じオプションを受け入れます。


1
Araxis Mergeも構成されています。araxis.com/merge/scm_integration.html
ΩmegaMan

8
使用例:git difftool -t kdiff3 HEAD
emanaton

24

これに1つ追加します。デフォルトのツール(カレイドスコープなど)の1つとしてサポートされていないdiffアプリを定期的に使用したい

git difftool -t

デフォルトをdiff通常のコマンドラインにすることも好きなので、GIT_EXTERNAL_DIFF変数をことはできません。

diff次のコマンドを使用して、任意のアプリを1回限りで使用できます。

git difftool --extcmd=/usr/bin/ksdiff

指定したコマンドに2つのファイルを渡すだけなので、おそらくラッパーも必要ありません。


1
良い点:その--extcmdオプションについてまだ誰も言及していません。+1。私はそれを私の答えに含めました。
VonC、2011

19

VonCの回答に基づいてファイルの削除と追加を処理するには、次のコマンドとスクリプトを使用します。

> git config --global diff.tool winmerge
> git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\" \"$BASE\""
> git config --global difftool.prompt false

これをあなたのグローバルに置くのと同じ.gitconfigです:

[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = winmerge.bat "$LOCAL" "$REMOTE" "$BASE"
[difftool]
    prompt = false

次に、以下をに入れwinmerge.shます。

#!/bin/sh
NULL="/dev/null"
if [ "$2" = "$NULL" ] ; then
    echo "removed: $3"
elif [ "$1" = "$NULL" ] ; then
    echo "added: $3"
else
    echo "changed: $3"
    "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$1" "$2"
fi

winmerge.shスクリプトへの優れた追加。+1。私はあなたの答えにリンクするために私の答えを更新しました。
VonC 2010年

1
winmerge.bat2番目のスニペットはwinmerge.sh
BartoszKP 2014年

多くのツールでこれを作成できますか?そして、それらをファイル拡張子で関連付けますか?
yucer

12

Windows / msys gitのソリューション

答えを読んだ後、1​​つのファイルのみを変更するという簡単な方法を発見しました。

  1. 引数2および5を使用して、diffプログラムを呼び出すバッチファイルを作成します。このファイルはパスのどこかにある必要があります。(それがどこにあるかわからない場合は、c:\ windowsに入れてください)。たとえば、「gitdiff.bat」と呼びます。鉱山は:

    @echo off
    REM This is gitdiff.bat
    "C:\Program Files\WinMerge\WinMergeU.exe" %2 %5
    
  2. バッチファイルを指すように環境変数を設定します。次に例を示しますGIT_EXTERNAL_DIFF=gitdiff.bat。または、次のように入力してPowerShellを使用しますgit config --global diff.external gitdiff.bat

    引用符を使用しないか、パス情報を指定しないことが重要です。そうしないと機能しません。そのため、gitdiff.batをパスに含める必要があります。

ここで「git diff」と入力すると、外部のdiffビューアが呼び出されます。


1
+1(できれば+10)これは本当に最も簡単な解決策です。私は受け入れられた答えで何時間も苦労し、最終的にあきらめました(私の問題のいくつかはおそらくPowerShellを介したGitの実行に関連していた...)しかし、私git config --global diff.external winmerge.cmdGIT_EXTERNAL_DIFF環境変数を設定する代わりにを使用しました。
Christoffer Lette 2012

このソリューションに関するいくつかの問題:1.新しいファイルでは機能しません。WinMergeは、比較する2番目のファイルを入力するように要求します。2.次のファイルを比較するためのウィンドウは、現在のWinMergeウィンドウを閉じた後にのみ開きます。すべてのファイルを同時に表示する簡単な方法はありません。
イエスH

9

cygwinを使用してこれを行う場合は、cygpathを使用する必要がある場合があります。

$ git config difftool.bc3.cmd "git-diff-bcomp-wrapper.sh \$LOCAL \$REMOTE"
$ cat git-diff-bcomp-wrapper.sh
#!/bin/sh
"c:/Program Files (x86)/Beyond Compare 3/BComp.exe" `cygpath -w $1` `cygpath -w $2`

何らかの理由で、「bc3」を使用しても機能しなくなりましたが、代わりに「beyond」を使用しても問題ありません。
idbrii

9

他のいくつかの外部diffツールを調べた後diff、IntelliJ IDEA(およびAndroid Studio)のビューが私にとって最適であることがわかりました。

手順1-コマンドラインから実行されるようにIntelliJ IDEAを設定する

IntelliJ IDEAをdiffツールとして使用する場合は、最初にIntelliJ IDEAを設定して、コマンドラインから次の手順に従って実行する必要があります

macOSまたはUNIXの場合:

  1. IntelliJ IDEAが実行されていることを確認します。
  2. メインメニューで、を選択しますTools | Create Command-line Launcher。[ランチャースクリプトの作成]ダイアログボックスが開き、ランチャースクリプトの推奨パスと名前が表示されます。デフォルトを受け入れるか、独自のパスを指定できます。後で必要になるので、注意してください。IntelliJ IDEAの外で、ランチャースクリプトのパスと名前をパスに追加します。

Windowsの場合:

  1. IntelliJ IDEA実行可能ファイルの場所をPathシステム環境変数で指定します。この場合、任意のディレクトリからIntelliJ IDEA実行可能ファイルおよびその他のIntelliJ IDEAコマンドを呼び出すことができます。

ステップ2-IntelliJ IDEAをdifftoolとして使用するようにgitを構成する

このブログ投稿の指示に従ってください:

バッシュ

export INTELLIJ_HOME /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS
PATH=$IDEA_HOME $PATH

set INTELLIJ_HOME /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS
set PATH $INTELLIJ_HOME $PATH

次に、以下をgit構成に追加します。

[merge]
   tool = intellij
[mergetool "intellij"]
   cmd = idea merge $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") $(cd $(dirname "$BASE") && pwd)/$(basename "$BASE") $(cd $(dirname "$MERGED") && pwd)/$(basename "$MERGED")
   trustExitCode = true
[diff]
   tool = intellij
[difftool "intellij"]
   cmd = idea diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE")

git difftoolまたはで試すことができますgit difftool HEAD~1


8

これはWindows 7で動作します。中間のshスクリプトは必要ありません。

.gitconfigの内容:

    [diff]
      tool = kdiff3

    [difftool]
       prompt = false

    [difftool "kdiff3"]
      path = C:/Program Files (x86)/KDiff3/kdiff3.exe
      cmd = "$LOCAL" "$REMOTE"

マージツールとしてkdiff3も定義していますか?もしそうならあなたのgitconfigのその部分を共有することを心に留めていますか?
blong

2
ありがとう。これは私にとってはうまくいきませんでしたが、私が削除pathして次のように変更cmdしたときはうまくいきました"\"C:/Program Files (x86)/KDiff3/kdiff3.exe\" \"$LOCAL\" \"$REMOTE\""
Steve Chambers

7

上記の素晴らしい答えの短い要約:

git difftool --tool-help
git config --global diff.tool <chosen tool>
git config --global --add difftool.prompt false

次に、次のように入力して使用します(オプションでファイル名も指定します)。

git difftool

6

前書き

参考までに、VonCの回答のバリエーションを含めたいと思います。変更されたPATHでGSysのMSysバージョン(現時点では1.6.0.2)を使用しており、Bashシェルではなく、Powershell(またはcmd.exe)からGit自体を実行していることに注意してください。

新しいコマンドを導入しましたgitdiff。このコマンドを実行git diffすると、一時的にリダイレクトされ、選択したビジュアルdiffプログラムが使用されます(永続的に実行するVonCのソリューションとは異なります)。これにより、デフォルトのGit diff機能(git diff)とビジュアルdiff機能(gitdiff)の両方を使用できます。どちらのコマンドも同じパラメーターを取るため、たとえば、特定のファイルの変更を視覚的に比較するには、次のように入力します。

gitdiff path/file.txt

セットアップ

$GitInstallGitがインストールされているディレクトリのプレースホルダーとして使用されることに注意してください。

  1. 新しいファイルを作成し、 $GitInstall\cmd\gitdiff.cmd

    @echo off
    setlocal
    for /F "delims=" %%I in ("%~dp0..") do @set path=%%~fI\bin;%%~fI\mingw\bin;%PATH%
    if "%HOME%"=="" @set HOME=%USERPROFILE%
    set GIT_EXTERNAL_DIFF=git-diff-visual.cmd
    set GIT_PAGER=cat
    git diff %*
    endlocal
    
  2. 新しいファイルを作成します$GitInstall\bin\git-diff-visual.cmd[visual_diff_exe]プレースホルダーを、選択したdiffプログラムへのフルパスで置き換えます)

    @echo off
    rem diff is called by git with 7 parameters:
    rem path old-file old-hex old-mode new-file new-hex new-mode
    echo Diffing "%5"
    "[visual_diff_exe]" "%2" "%5"
    exit 0
    
  3. これで完了です。gitdiffGitリポジトリ内から実行すると、変更されたすべてのファイルに対してビジュアルdiffプログラムが呼び出されます。


6

これは、Windowsで機能するバッチファイルです。DiffMergeがデフォルトの場所にインストールされ、x64を処理し、必要に応じてバックスラッシュの置き換えを処理し、自分自身をインストールする機能があると想定しています。DiffMergeをお気に入りのdiffプログラムに簡単に置き換えることができるはずです。

インストールするには:

gitvdiff --install 

gitvdiff.bat:

@echo off

REM ---- Install? ----
REM To install, run gitvdiff --install

if %1==--install goto install



REM ---- Find DiffMerge ----

if DEFINED ProgramFiles^(x86^) (
    Set DIFF="%ProgramFiles(x86)%\SourceGear\DiffMerge\DiffMerge.exe"
) else (
    Set DIFF="%ProgramFiles%\SourceGear\DiffMerge\DiffMerge.exe"
)



REM ---- Switch forward slashes to back slashes ----

set oldW=%2
set oldW=%oldW:/=\%
set newW=%5
set newW=%newW:/=\%


REM ---- Launch DiffMerge ----

%DIFF% /title1="Old Version" %oldW% /title2="New Version" %newW%

goto :EOF



REM ---- Install ----
:install
set selfL=%~dpnx0
set selfL=%selfL:\=/%
@echo on
git config --global diff.external %selfL%
@echo off


:EOF

すばらしいスクリプトです。DiffMergeコマンドを探す手間を省きました。引用符を使用するようにインストール行を変更したい場合があります-私のマシンでは問題がありました: "%1" == "-install"
Mario

6

MacでXCodeを使用している場合は、FileMergeがインストールされています。端末コマンドはopendiffですので、あなたはただ行うことができますgit difftool -t opendiff


2
煩わしいプロンプトを回避するには、-yオプションを使用します。残念ながら、gitは次の変更されたファイルを提供する前にFileMergeが終了するまで待機します。-dオプションを使用して、ディレクトリ比較を一度に実行します。
miner49r 2013

オプション-tには完全なパスが必要なようです。多分git difftool --extcmd = opendiffを使用する方が良いでしょう。
yucer

6

meldをインストールする

 # apt-get install meld

次に、それをdifftoolとして選択します

 $ git config --global diff.tool meld

touをコンソールタイプで実行したい場合:

 $ git difftool

グラフィックモードタイプを使用する場合:

 $ git mergetool

そして出力は次のようになります:

 'git mergetool' will now attempt to use one of the following tools:
 meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse
 diffmerge ecmerge p4merge araxis bc3 codecompare emerge vimdiff
 Merging:
 www/css/style.css
 www/js/controllers.js

 Normal merge conflict for 'www/css/style.css':
   {local}: modified file
   {remote}: modified file
 Hit return to start merge resolution tool (meld):

したがって、Enterキーを押してmeld(デフォルト)を使用すると、グラフィックモードが開き、マジックが保存され、マージを解決するキーを押します。それで全部です


5

Linuxバージョンの1.6.3より前のgitバージョンでのdiffツールの設定方法(1.6.3がgitにdifftoolを追加)の場合、これはすばらしい簡潔なチュートリアルです。

簡単に言えば:

ステップ1:これを.gitconfigに追加する

[diff]
  external = git_diff_wrapper
[pager]
  diff =

ステップ2:git_diff_wrapperという名前のファイルを作成し、$ PATHのどこかに配置します

#!/bin/sh

vimdiff "$2" "$5"

4

Mac OS Xでは、

git difftool -t diffuse 

gitフォルダーで私のために仕事をします。拡散板を取り付けるには、ポートを使用できます-

sudo port install diffuse

3

使用できますgit difftool

あなたが持っている場合、たとえばメルドを、あなたはbranchsを編集することができますmasterし、develによって:

git config --global diff.external meld
git difftool master..devel

3

以下は他の回答から収集できますが、私にとっては難しい(情報が多すぎる)ため、tkdiffの「入力するだけ」の回答を次に示します。

git difftool --tool=tkdiff <path to the file to be diffed>

tkdiffをお気に入りの差分ツールの実行可能ファイル名に置き換えることができます。(たとえばtkdiff)、(またはお気に入りの差分ツール)がPATHに含まれている限り、起動されます。


これが最も簡単で最速の方法です。
Zameer Fouzan

2

ここで(tkdiffを使用して)凝ったものを試しましたが、何もうまくいきませんでした。そこで、次のスクリプトtkgitdiffを作成しました。それは私がそれをするのに必要なことをします。

$ cat tkgitdiff
#!/bin/sh

#
# tkdiff for git.
# Gives you the diff between HEAD and the current state of your file.
#

newfile=$1
git diff HEAD -- $newfile > /tmp/patch.dat
cp $newfile /tmp
savedPWD=$PWD
cd /tmp
patch -R $newfile < patch.dat
cd $savedPWD
tkdiff /tmp/$newfile $newfile

1

私はubuntuでkompareを使用しています:

sudo apt-get install kompare

2つのブランチを比較するには:

git difftool -t kompare <my_branch> master

1

私はこのビットを~/.gitconfig長い間使用してきました:

[diff]
    external = ~/Dropbox/source/bash/git-meld

git-meld

#!/bin/bash
if [ "$DISPLAY" = "" ];
then
    diff $2 $5
else
    meld $2 $5
fi

しかし、私は常にグラフィック環境でmeldを使用することにうんざりしており、この設定で通常のdiffを呼び出すのは簡単ではないので、これに切り替えました。

[alias]
    v =  "!sh -c 'if [ $# -eq 0 ] ; then git difftool -y -t meld ; else git difftool -y $@ ; fi' -"

この設定では、次のようなことが機能します。

git v
git v --staged
git v -t kompare
git v --staged -t tkdiff

そして、私はまだ古き良きものを保つようになりgit diffます。


0

ファイルタイプに関連付けられたdiffツールがすでにある場合(たとえば、diffビューアに付属するTortoiseSVNをインストールしたため)、通常のgit diff出力を「temp」ファイルにパイプするだけで、そのファイルを直接知る必要はありません。ビューアについての何か:

git diff > "~/temp.diff" && start "~/temp.diff"

グローバルエイリアスとして設定すると、さらに効果的になります。 git what

[alias]
    what = "!f() { git diff > "~/temp.diff" && start "~/temp.diff"; }; f"

0

コマンドラインを使用していない場合、tortoise gitをインストールすると、ファイルを右クリックして、「後で比較」オプション付きのtortoisegitサブメニューを表示できます。

これを最初のファイルで選択したら、2番目のファイルを右クリックし、tortoisegitサブメニューに移動して、「Diff with == yourfilehere ==」を選択します。これにより、tortoisegitmergeのGUIが結果に表示されます。


0

GIT / SVN diffのGUIラッパーであるxd http://github.com/jiqingtang/xdを試してみてください。それ自体は差分ツールではありません。走りxdたいときに走るgit diffsvn diffと、ファイルのリスト、プレビューウィンドウが表示され、tkdiff、xxdiff、gvimdiff、emacs(ediff)、xemacs(ediff)、meldなど、好きなdiffツールを起動できますdiffuse、konpare、kdiff3。カスタムツールを実行することもできます。

残念ながら、このツールはWindowsをサポートしていません。

開示:私はこのツールの作成者です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.