使用.gitconfigconfigurationdiff工具?

如何configurationgit使用不同的工具来与.gitconfig文件进行差异化。 我有这在我的.gitconfig:

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

它不起作用,它只是打开常规命令行差异。 当我做

 export GIT_EXTERNAL_DIFF=git-chdiff 

那么git diff将打开外部差异工具(所以我知道外部差异工具脚本工作正常)。 diff文件的.gitconfigconfiguration有问题吗?

Git提供了一系列预先configuration好的“开箱即用”(diff),并允许你使用(kdiff3,kompare,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,diffuse,opendiff,p4merge和araxis)指定你自己的。 要使用预configuration的difftools之一(例如“vimdiff”),可以在~/.gitconfig添加以下几行:

 [diff] tool = vimdiff 

另一方面,指定自己的difftool需要更多的工作,请参阅这里和这里如何查看带有可视化diff程序的“git diff”输出?

其他的方法(从命令行):

 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。

其他人对此做出了99%的回答,但是还有一个步骤被遗漏了。 (我的答案将来自OSX,所以你将不得不相应地改变文件path)

您对~/.gitconfig进行这些更改:

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

这将修复diff工具。 你也可以通过从terminalinput这些命令直接编辑~/.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

这里是我configurationdiff和merge工具的部分〜/ .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”的工具。 然后,我在[diff] tool =部分中将默认的工具“diffmerge”设置为默认值。

我明显在我的path中有“diffmerge”命令。 否则,我需要给可执行文件的完整path。

添加其中的一个块可以让我在我的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 

重现我的答案从这个线程是更具体的设置超越比较作为Git的差异工具。 我所共享的所有细节同样适用于任何差异化工具,以便在此共享:

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

 git config --global diff.tool bc3 

以上命令在%userprofile%目录中的.gitconfig创build以下条目:

 [diff] tool = bc3 

然后你运行下面的命令:

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

上面的命令在.gitconfig文件中创build下面的条目:

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

这里要知道的是关键的bc3 。 这是一个众所周知的git对应于市场上熟知的比较工具( bc3对应于Beyond Compare工具的第三版本)的特定版本的关键。 如果你想看到所有预定义的键,只需在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 

您可以使用上述任何键或定义您自己的自定义键。 如果你想设置一个没有映射到上面列出的任何一个键的工具(或者一个知名工具的新版本),那么你可以自由地把它映射到上面列出的任何一个键或者你的一个自定义键拥有。

如果你必须设置一个绝对新的市场比较工具,或者现有的已知工具的新版本已经发布,而不是映射到git中的任何预定义的键,那该怎么办呢?

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

  1. 我可以将比较4工具映射到已有的对应超越3版的键bc3 。 我没有比我的电脑上的版本3,所以我不在乎。 如果我想,我可以将它映射到上面列表中的任何预定义的键,例如examdiff

    如果您将熟知的工具版本映射到适当的密钥,那么您将不需要运行第二个命令,因为他们的安装path已经知道了。

    例如,如果我已经在我的盒子上安装了比较版本3,那么在我的.gitconfig文件中具有下面的configuration就足够了:

     [diff] tool = bc3 

    但是如果你想改变默认的关联工具,那么你最终会提到path属性,这样git就可以知道你的新工具的exe文件的启动path。 这里是狐狸git推出超出比较4的入口。 注意exe的path:

     [difftool "bc3"] path = c:/program files/Beyond Compare 4/bcomp.exe 
  2. 最干净的方法是为新的比较工具或新版本的众所周知的工具完全定义一个新的密钥。 就像我的情况一样,我定义了一个新的密钥bc4以便记忆。 在这种情况下,您必须全部运行两个命令,但是第二个命令不会设置新工具可执行文件的path。 相反,您必须为您的新工具设置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文件中创build以下条目:

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

我强烈build议你按照方法#2来避免将来的混乱。