当我键入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
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别