使用.gitconfig配置diff工具

时间:2011-06-20 14:08:57

标签: git

如何配置Git以使用其他工具与.gitconfig文件进行区分?

我的.gitconfig中有这个:

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

它不起作用;它只是打开常规命令行diff。当我做的时候

export GIT_EXTERNAL_DIFF=git-chdiff

然后git diff将打开外部差异工具(所以我知道外部差异工具脚本工作正常)。我对diff工具的.gitconfig配置有什么问题吗?

10 个答案:

答案 0 :(得分:150)

另一种方法(从命令行):

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

前两行会将difftool和mergetool设置为tkdiff - 根据您的喜好进行更改。第三行禁用恼人的提示,因此无论何时点击git difftool,它都会自动启动difftool。

答案 1 :(得分:120)

Git提供了一系列预先配置的“开箱即用”的差异工具(kdiff3,kompare,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,diffuse,opendiff,p4merge和araxis),以及还允许您指定自己的。要使用其中一个预配置的difftools(例如“vimdiff”),请将以下行添加到~/.gitconfig

[diff]
    tool = vimdiff

现在,您将能够运行“git difftool”并使用您选择的工具。

另一方面,指定自己的difftool需要更多工作,请参阅How do I view 'git diff' output with my preferred diff tool/ viewer?

答案 2 :(得分:54)

其他人对此做了99%的回答,但还有一步。 (我的答案将来自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

答案 3 :(得分:33)

这是我配置差异和合并工具的〜/ .gitconfig的一部分。我喜欢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”的工具。然后我将工具“diffmerge”设置为[diff] tool =部分的默认值。

我的路径中显然有“diffmerge”命令。否则,我需要提供可执行文件的完整路径。

答案 4 :(得分:14)

在我的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

答案 5 :(得分:14)

this线程中再现我的回答,这个回答更具体地说是设置超出比较作为Git的差异工具。我分享的所有细节对于任何一般的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的一个众所周知的关键字,对应于市场上可用的众所周知的比较工具的特定版本(bc3对应于Beyond Compare工具的第3版)。如果你想看到所有预定义的键只需在git bash上运行git difftool --tool-help命令。它返回下面的列表:

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

您可以使用上述任何键或定义自己的自定义键。如果您想完全设置一个新工具(或新发布的众所周知的工具版本),它不会映射到上面列出的任何键,那么您可以将它映射到上面列出的任何键或<你自己的新的自定义键。

如果必须设置

的比较工具,该怎么办?
  • 绝对新的市场

OR

  • 现有知名工具的新版本已发布,未映射到git中的任何预定义键

就像在我的情况下,我已经安装了超越比较4.超越比较是git的一个众所周知的工具,但默认情况下它的版本4版本没有映射到任何现有的键。所以你可以遵循以下任何一种方法:

  1. 我可以将比较4工具之外的地图映射到已经存在的密钥bc3,这对应于超越比较3版本。我的计算机上没有超越版本3,所以我不在乎。如果我想要,我可以将它映射到上面列表中的任何预定义键,例如examdiff

    如果您将众所周知的工具版本映射到已存在的/适当的 已知密钥然后你不需要运行第二个命令作为他们的安装 路径已经为git 所知。

    例如如果我在我的盒子上安装了超出版本3的版本,那么在我的.gitconfig文件中配置以下内容就足够了:

    [diff]
    tool = bc3
    

    但是如果你想更改默认的关联工具,那么你最终会分别提到path属性,以便git知道你必须启动新工具的exe的路径。以下是狐狸git在比较4之后发布的条目。注意exe的路径:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. 最干净的方法是为新的比较工具或一个众所周知的工具的新版本共同定义一个新密钥。就像我的情况一样,我定义了一个新的密钥bc4,以便它易于记忆。在这种情况下,您必须运行两个命令,但第二个命令不会设置新工具的可执行文件的路径。相反,您必须为新工具设置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\"
    
  3. 我强烈建议您遵循方法#2,以避免将来对自己造成任何混淆。

答案 6 :(得分:3)

如果要使用多个差异工具,请向.gitconfig添加别名

[alias]
    kdiff = difftool --tool kdiff3

答案 7 :(得分:1)

几乎所有上述解决方案都不适用于 git 版本 2

我的:git 版本 = 2.28.0

difftool的解决方法:git config --global diff.tool vimdiff

之后你可以毫无问题地使用它

答案 8 :(得分:0)

请参阅Microsoft vscode-tips-and-tricks。 只需在终端中运行以下命令:

git config --global merge.tool code

但是首先,您需要将code命令添加到PATH中。 enter image description here

答案 9 :(得分: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将在记事本++中打开提交信息