使用.gitconfig配置diff工具

rya*_*zec 144 git

如何配置Git使用不同的工具与.gitconfig文件进行区分?

我在.gitconfig中有这个:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff
Run Code Online (Sandbox Code Playgroud)

这是行不通的; 它只是打开常规命令行diff.当我做

export GIT_EXTERNAL_DIFF=git-chdiff
Run Code Online (Sandbox Code Playgroud)

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

Ome*_*gan 160

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

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false
Run Code Online (Sandbox Code Playgroud)

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

  • 我做了`git config --global diff.tool diffmerge`但是当我做`git diff myfile.txt`它仍然给了我默认的unix diff (9认同)
  • @amphibient:尝试使用git diff**工具**myfile.txt来使用该工具. (5认同)

Fre*_*ihl 128

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

[diff]
    tool = vimdiff
Run Code Online (Sandbox Code Playgroud)

现在,您将能够运行"git difftool"并使用您选择的工具.

另一方面,指定自己的difftool需要更多的工作,请参阅如何使用我首选的diff工具/查看器查看'git diff'输出?


小智 62

其他人对此做了99%的回答,但还有一步.(我的答案将来自OS X,因此您必须相应地更改文件路径.)

您对以下内容进行了以下更改~/.gitconfig:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE
Run Code Online (Sandbox Code Playgroud)

这将修复diff工具.您也可以~/.gitconfig通过从终端输入以下命令直接修改此问题:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"
Run Code Online (Sandbox Code Playgroud)

其他人都没有提到的1%是在使用它时你不能只跑git diff myfile.txt; 你需要跑git difftool myfile.txt.

  • 最后1%投票.没有什么比完全锤击的指甲更令人满意了;) (20认同)
  • 好的,你错过了步骤`git config --global --add difftool.prompt false`.;) (5认同)

Dan*_*Ray 35

这是我配置差异和合并工具的〜/ .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\"
Run Code Online (Sandbox Code Playgroud)

所以,你看,你在这一[difftool "diffmerge"]行中定义了一个名为"diffmerge"的工具.然后我将工具"diffmerge"设置为该[diff] tool =部分的默认值.

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


RBT*_*RBT 16

这个线程中再现我的答案,这个更专门用于设置超出比较作为Git的diff工具.我分享的所有细节对于任何一般的diff工具同样有用,所以在这里分享它:

我们运行的第一个命令如下:

git config --global diff.tool bc3
Run Code Online (Sandbox Code Playgroud)

上面的命令在.gitconfigfind %userprofile%目录中创建以下条目:

[diff]
    tool = bc3
Run Code Online (Sandbox Code Playgroud)

然后运行以下命令(在这种特殊情况下运行此命令是多余的,仅在某些特殊情况下是必需的.您将在短时间内知道它):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"
Run Code Online (Sandbox Code Playgroud)

以上命令在.gitconfig文件中创建以下条目:

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe
Run Code Online (Sandbox Code Playgroud)

这里要知道的是关键bc3.这是git的一个众所周知的关键字,对应于市场上可用的众所周知的比较工具的特定版本(bc3对应于Beyond 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
Run Code Online (Sandbox Code Playgroud)

您可以使用上述任何键或定义自己的自定义键.如果您想完全设置一个新工具(或新发布的知名工具版本),但不能映射到上面列出的任何键,那么您可以将其映射到上面列出的任何键或的键.你自己的自定义键.

如果你必须设置一个比较工具怎么办?

  • 市场上绝对新鲜

要么

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

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

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

    如果将已知版本的工具映射到适当的现有/已知密钥,则不需要运行第二个命令,因为git已知其安装路径.

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

    [diff]
    tool = bc3
    
    Run Code Online (Sandbox Code Playgroud)

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

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
    Run Code Online (Sandbox Code Playgroud)
  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\""
    
    Run Code Online (Sandbox Code Playgroud)

    运行上面的命令会在.gitconfig文件中创建以下条目:

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    
    Run Code Online (Sandbox Code Playgroud)

我强烈建议您遵循方法#2,以避免将来对自己造成任何混淆.


moo*_*oom 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
Run Code Online (Sandbox Code Playgroud)

视窗

[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
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您想选择使用多个差异工具,请在文件.gitconfig 中添加别名:

[alias]
    kdiff = difftool --tool kdiff3
Run Code Online (Sandbox Code Playgroud)