.gitconfigを使用したdiffツールの構成


159

.gitconfigファイルとの比較に別のツールを使用するようにGitを構成するにはどうすればよいですか?

私の.gitconfigにこれがあります:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

それは動作しません; 通常のコマンドラインdiffを開くだけです。私がする時

export GIT_EXTERNAL_DIFF=git-chdiff

次にgit diff、外部差分ツールを開きます(外部差分ツールスクリプトが正常に機能することがわかっています)。差分ツールの.gitconfig構成に何か問題がありますか?


1
stackoverflow.com/questions/255202/…(おそらくこれを複製として閉じる)を参照してください
Stein G. Strindhaug

回答:


140

Gitは、さまざまなdifftoolsを事前構成済みの「そのまま」(kdiff3、kompare、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff、ecmerge、diffuse、opendiff、p4merge、araxis)提供しており、また自分で指定します。事前に設定difftools(例えば、「はvimdiff」)のいずれかを使用するには、あなたはあなたに次の行を追加します~/.gitconfig

[diff]
    tool = vimdiff

これで、「git difftool」を実行して、選択したツールを使用できるようになります。

一方、独自のdifftoolを指定するには、少し手間がかかります。「git diff」の出力を好みのdiffツール/ビューアで表示するにどうすればよいですか?を参照してください


最初のリンクが壊れています。ドメインがから.comに変更されたよう.orgです。jeetworks.org/software
RBT

1
構成済みの「すぐに使える」difftoolとはどういう意味ですか?リストにない外部diffツール「winMerge」をセットアップするには、投稿で述べたのと同じ設定を行う必要があり、追加構成なしですべてが機能し始めました。つまり、gitは「winMerge」もそのままサポートすることを意味します。投稿から理解できる限り、サポートされていない差分ツールをセットアップするために追加の作業/設定/構成が必要であることは同じです。 gitによるボックス。
RBT 2017年

169

これを行う追加の方法(コマンドラインから):

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

最初の2行はdifftoolとmergetoolを設定tkdiffします-好みに応じて変更してください。3行目は、迷惑なプロンプトを無効にするので、ヒットgit difftoolするたびにdifftoolが自動的に起動します。


11
私はそうしましたgit config --global diff.tool diffmergeが、git diff myfile.txtそれを行ってもデフォルトのUNIX差分が表示されました
両生類2014年

おそらく、別のdiffツールを定義するローカル構成がありますか?
Omer Dagan 14

1
おそらくあなたはdiffmergeに正しいパラメータを渡す必要があります。このリンクはメルドのためにそれを行う方法について説明します:リンク:nathanhoad.net/how-to-meld-for-git-diffs-in-ubuntu-hardy
RPTR

5
@amphibient:git diff ツール myfile.txtを試してみてください。
JBRウィルキンソン2016

72

他の人はこれについて99%の回答をしましたが、1つのステップが残っています。(私の答えはOS Xから来るので、それに応じてファイルパスを変更する必要があります。)

次の変更を行います~/.gitconfig

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

これにより、diffツールが修正されます。~/.gitconfig端末から次のコマンドを入力して、直接編集せずにこれを修正することもできます。

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

他のすべての人が言及しなかった1%は、これを使用する場合、実行できないだけgit diff myfile.txtです。実行する必要がありますgit difftool myfile.txt


23
最後の1%に賛成。完全に打ち込まれた釘ほど満足のいくものはありません;)
Titou

1
それをデフォルトのツールにする方法はありますか?
math0ne 2017

6
すばらしいですが、ステップgit config --global --add difftool.prompt falseがありません。;)
スマ

36

〜/ .gitconfigの一部で、diffとmergeツールを構成しています。SourceGearのdiffmergeが好きです。(実際のところ、とても気に入っています)。

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

つまり、この[difftool "diffmerge"]行では "diffmerge"という名前のツールを定義しています。次に、[diff] tool =セクション「diffmerge」をデフォルトとして設定します。

私のパスには、明らかに「diffmerge」コマンドが含まれています。それ以外の場合は、実行可能ファイルへのフルパスを指定する必要があります。


バックスラッシュをすべてエスケープせずに:diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
Tim Lovell-Smith

1
私はより単純な方法で進みますdiffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Tim Lovell-Smith

また、CygwinからWindowsバージョンを使いやすくするための便利な「sgdm_cygwin.sh」スクリプトがあります。
thoni56 2016

だからあなたはただ行うことができln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmerge、あなたはすべて上記の設定を使うように設定されています。同様にdiffmerge、cygwinパスを使用してcygwinコマンドラインから直接。
thoni56

sgdm.exe今日だろう
kzu

22

このスレッドから私の回答を再現します。これは、Gitのdiffツールとしての比較を超えた設定に固有のものでした。私が共有したすべての詳細は、一般的にどのようなdiffツールにも等しく役立つため、ここで共有します。

実行する最初のコマンドは次のとおりです。

git config --global diff.tool bc3

上記のコマンドは.gitconfig%userprofile%ディレクトリ内の以下にエントリを作成します。

[diff]
    tool = bc3

次に、以下のコマンドを実行します(このコマンドの実行は、この特定のケースでは冗長であり、一部の特殊なケースでのみ必要です。すぐにわかります):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

上記のコマンドは、.gitconfigファイル内に以下のエントリを作成します。

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

ここで知っておくことが重要bc3です。これは、市場で入手可能な既知の比較ツールの特定のバージョンに対応するgitの既知のキーです(bc3Beyond Compareツールの3番目のバージョンに対応)。すべての定義済みのキーを表示したい場合はgit difftool --tool-help、git bashでコマンドを実行してください。リストの下に戻ります:

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

上記のキーを使用するか、独自のカスタムキーを定義できます。上記のいずれのキーにもマップしない新しいツール(または新しくリリースされた既知のツールのバージョン)を完全にセットアップする場合は、上記のいずれかのキーまたは新しいキーに自由にマップできます。独自のカスタムキー。

比較ツールをセットアップする必要がある場合はどうなりますか

  • まったく新しい

または

  • 既存のよく知られたツールの新しいバージョンがリリースされましたが、gitで事前定義されたキーにマップされていませんか?

私の場合と同様に、compare 4を超えてインストールしました。beyondcompareはgitの有名なツールですが、バージョン4リリースはデフォルトで既存のキーのいずれにもマップされていません。したがって、以下のアプローチのいずれかに従うことができます。

  1. Beyond Compare 4ツールをbc3、Beyond Compare 3バージョンに対応する既存のキーにマッピングできます。私は自分のコンピューターにバージョン3を比較する以上のことはしなかったので、気にしませんでした。必要に応じて、上記のリストにある事前定義されたキーのいずれかにマッピングすることもできますexamdiff

    既知のバージョンのツールを適切な既存の既知のキーにマップする場合、インストールパスはgitに既知であるため、2番目のコマンドを実行する必要はありません

    たとえば、ボックスに比較バージョン3を超えてインストールした場合、.gitconfigファイルに以下の設定があれば十分です。

    [diff]
    tool = bc3
    

    しかし、デフォルトの関連付けられたツールを変更する場合は、path属性を個別に言及して、gitが新しいツールのexeを起動する必要がある場所からのパスを認識できるようにします。代わりにfoxes gitが比較4を超えて起動するエントリがあります。exeのパスに注意してください。

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. 最もクリーンなアプローチは、新しい比較ツールまたはよく知られたツールの新しいバージョンに対して新しいキーを完全に定義することです。私の場合と同様に、bc4覚えやすいように新しいキーを定義しました。そのような場合、全部で2つのコマンドを実行する必要がありますが、2番目のコマンドは新しいツールの実行可能ファイルのパスを設定しません。代わりに、次のようにcmd新しいツールの属性を設定する必要があります。

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    上記のコマンドを実行すると、.gitconfigファイルに以下のエントリが作成されます。

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

今後、自分自身の混乱を避けるために、アプローチ2に従うことを強くお勧めします。


16

以下のブロックの1つを追加すると、WindowsおよびLinux開発環境でKDiff3を使用できます。これは、優れた一貫したクロスプラットフォームの差分およびマージツールになります。

Linux

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

ウィンドウズ

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

LinuxとWindowsの両方に対して条件付きで正しいパスを指定する単一のクロスプラットフォーム.gitconfigファイルを作成する方法を見つけましたか?
ジェリーアッシャー2018

1
正直なところ、私はどこでもmeldに切り替えましたが、うまくいくようです。
moodboom 2018年

trustExitCode = falseを設定する理由はありますか?私の理解では、falseが設定されている場合、gitはツールからのゼロ以外の終了コードを無視します。したがって、もしあなたのツールcrush gitが誤ってマージが成功したと思うでしょう。しかし、それをfalseに設定する理由があるかもしれません、説明してください。
アポロ

私は信じてtrustExitCode = false、マージが成功した場合Gitは、むしろツールが真または偽のステータスで終了することが起こったかどうかに依存するよりも、お聞きします。
moodboom

4

複数のdiffツールを使用するオプションが必要な場合は、.gitconfigにエイリアスを追加します

[alias]
    kdiff = difftool --tool kdiff3

--toolオプションについて言及するために。ありがとう
itMaxence

0

Microsoft vscode-tips-and-tricksを参照してください。端末で次のコマンドを実行するだけです。

git config --global merge.tool code

しかし、最初codeに、PATHにコマンドを追加する必要があります。 ここに画像の説明を入力してください


0

Windowsでは$git difftool --tool-help、次のようなさまざまなオプションを表示するためにコマンドを実行する必要があります。

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

そして、私たちはそれらのいずれか(たとえば、winmerge)を次のように追加できます

$  git difftool --tool=winmerge

コミットする前にファイルを表示するようにnotepad ++を構成するには:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

と使用$ git commitすると、メモ帳++でコミット情報が開きます

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