当我键入gitdiff时,我想用我选择的可视化diff工具(Windows上的SourceGear“diffmerge”)查看输出。如何配置git以执行此操作?


当前回答

你可以使用gitdifftool。

例如,如果您有Meld,可以通过以下方式编辑分支master和devel:

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

其他回答

使用新的gitdifftool,只需将其添加到.gitconfig文件中即可:

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

也可以选择添加:

[difftool]
    prompt = false

还可以查看diffall,这是我编写的一个简单脚本,用于扩展串行打开每个文件的烦人(IMO)默认diff行为。

Windows上的全局.gitconfig位于%USERPROFILE%\.gitconfig中

我还有一个补充。我喜欢经常使用不支持作为默认工具之一的diff应用程序(例如万花筒),通过

git difftool -t

我还希望将默认diff作为常规命令行,因此设置GIT_EXTERNAL_diff变量不是一个选项。

您可以使用以下命令一次性使用任意diff应用程序:

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

它只将2个文件传递给您指定的命令,因此您可能也不需要包装器。

对于如何在1.6.3之前的Git版本上配置diff工具的Linux版本(1.6.3向Git添加了difftool),这是一个非常简洁的教程。

简而言之:

步骤1:将其添加到.gitconfig中

[diff]
  external = git_diff_wrapper
[pager]
  diff =

步骤2:创建一个名为git_diff_wrapper的文件,将其放在$PATH中的某个位置

#!/bin/sh

vimdiff "$2" "$5"

如果您通过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`

安装Meld:

 # apt-get install meld

然后选择它作为difftool:

 $ git config --global diff.tool meld

如果要在控制台中运行,请键入:

 $ 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(默认)。这将打开图形模式。进行神奇的保存并按下以解决合并。这就是全部。