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


当前回答

我在这里尝试了一些新奇的东西(使用tkdiff),但没有任何效果。所以我写了下面的脚本,tkgitdiff。它做了我需要它做的事。

$ cat tkgitdiff
#!/bin/sh

#
# tkdiff for git.
# Gives you the diff between HEAD and the current state of your file.
#

newfile=$1
git diff HEAD -- $newfile > /tmp/patch.dat
cp $newfile /tmp
savedPWD=$PWD
cd /tmp
patch -R $newfile < patch.dat
cd $savedPWD
tkdiff /tmp/$newfile $newfile

其他回答

Windows/MSYS Git解决方案

看完答案后,我发现了一种更简单的方法,只需要更改一个文件。

使用参数2和5创建一个批处理文件来调用diff程序。此文件必须位于您路径中的某个位置。(如果您不知道它在哪里,请将其放在C:\windows中。)调用它,例如,“gitdiff.bat”。我的是:@回声消失REM这是gitdiff.bat“C:\Program Files\WinMerge\WinMergeU.exe”%2%5将环境变量设置为指向批处理文件。例如:GIT_EXTERNAL_DIFF=gitdiff.bat。或通过PowerShell键入GIT-config--globaldiff.EXTERNAL gitdiff.bat。重要的是不要使用引号或指定任何路径信息,否则将无法工作。这就是为什么gitdiff.bat必须在您的路径中。

现在,当您键入“gitdiff”时,它将调用外部diff查看器。

您可能想尝试xd,它是Git/SVNdiff的GUI包装器。它本身不是diff工具。

当你想运行git diff或svn diff时,你可以运行xd,它会向你显示一个文件列表,一个预览窗口,你可以启动任何你喜欢的diff工具,包括tkdiff、xxdiff、gvimdiff、Emacs(ediff)、XEmacs(diff)、Meld、Diffuse、Kompare和KDiff3。您也可以运行任何自定义工具。

不幸的是,该工具不支持Windows。

披露:我是这个工具的作者。

以下内容可以从这里的其他答案中获得,但对我来说,这很难(信息太多),所以这里是tkdiff的“只需键入”答案:

git difftool --tool=tkdiff <path to the file to be diffed>

你可以用你最喜欢的diffing工具的可执行文件名来代替tkdiff。只要(例如tkdiff),(或您最喜欢的diffing工具)在您的PATH中,它就会启动。

介绍

作为参考,我想加入我对VonC答案的变化。请记住,我使用的是MSys版本的Git(此时为1.6.0.2)和修改的PATH,并从PowerShell(或cmd.exe)运行Git本身,而不是Bash shell。

我引入了一个新命令gitdiff。运行此命令会暂时重定向git diff以使用您选择的可视化diff程序(与VonC的解决方案相反,VonC会永久执行此操作)。这使我既可以使用默认的Git diff功能(gitdiff),也可以使用可视化diff功能。这两个命令都采用相同的参数,例如,为了直观地区分特定文件中的更改,可以键入

gitdiff path/file.txt

安装程序

注意,$GitInstall用作安装Git的目录的占位符。

创建新文件$GitInstall\cmd\gitdiff.cmd@回声消失设置本地的对于/F“delims=”%%I in(“%~dp0...”)do@set path=%%~fI\bin;%%~fI\mingw\bin;%路径%如果“%HOME%”==“”@设置HOME=%USERPROFILE%设置GIT_EXTERNAL_DIFF=GIT-DIFF-visual.cmd设置GIT_PAGER=猫git差异%*末端局部的创建一个新文件$GitInstall\bin\git-diff-visual.cmd(用您选择的diff程序的完整路径替换[visual_diff_exe]占位符)@回声消失git使用7个参数调用rem-diff:rem路径旧文件旧十六进制旧模式新文件新十六进制新模式回声差异“%5”“[visual_diff_exe]”“%2”“%5”退出0你现在完成了。在Git存储库中运行gitdiff现在应该为每个更改的文件调用可视化diff程序。

如果你在Mac上,并且有Xcode,那么你已经安装了FileMerge。终端命令是opendiff,因此您可以执行以下操作:

git difftool -t opendiff