当我键入git diff
命令时,我希望使用我选择的可视化差异工具(Windows上的SourceGear "diffmerge")查看输出。如何配置git以实现这一点?
当我键入git diff
命令时,我希望使用我选择的可视化差异工具(Windows上的SourceGear "diffmerge")查看输出。如何配置git以实现这一点?
我在Windows 7上测试通过。不需要中介的 sh 脚本。
.gitconfig 文件内容:
[diff]
tool = kdiff3
[difftool]
prompt = false
[difftool "kdiff3"]
path = C:/Program Files (x86)/KDiff3/kdiff3.exe
cmd = "$LOCAL" "$REMOTE"
前面的伟大答案简述如下:
git difftool --tool-help
git config --global diff.tool <chosen tool>
git config --global --add difftool.prompt false
然后通过输入以下命令来使用它(也可以选择指定文件名):
git difftool
安装Meld:
# apt-get install meld
$ 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):
为了参考,我想包含我对 VonC 的答案的变化。请记住,我正在使用修改过的 PATH 的 MSys 版本的 Git(此时为1.6.0.2),并从 PowerShell(或 cmd.exe)中运行 Git 自身,而不是 Bash shell。
我引入了一个新命令,gitdiff
。运行此命令会临时重定向 git diff
以使用您选择的视觉差异程序(与 VonC 的解决方案永久执行的方式不同)。这使我既可以拥有默认的 Git 差异功能(git diff
),也可以使用视觉差异功能(gitdiff
)。这两个命令都接受相同的参数,因此例如要在特定文件中可视地比较更改,您可以键入
gitdiff path/file.txt
请注意,$GitInstall
是 Git 安装目录的占位符。
Create a new file, $GitInstall\cmd\gitdiff.cmd
@echo off
setlocal
for /F "delims=" %%I in ("%~dp0..") do @set path=%%~fI\bin;%%~fI\mingw\bin;%PATH%
if "%HOME%"=="" @set HOME=%USERPROFILE%
set GIT_EXTERNAL_DIFF=git-diff-visual.cmd
set GIT_PAGER=cat
git diff %*
endlocal
Create a new file, $GitInstall\bin\git-diff-visual.cmd
(replacing [visual_diff_exe]
placeholder with full path to the diff program of your choice)
@echo off
rem diff is called by git with 7 parameters:
rem path old-file old-hex old-mode new-file new-hex new-mode
echo Diffing "%5"
"[visual_diff_exe]" "%2" "%5"
exit 0
You're now done. Running gitdiff
from within a Git repository should now invoke your visual diff program for every file that was changed.
gitvdiff --install
gitvdiff.bat:
@echo off
REM ---- Install? ----
REM To install, run gitvdiff --install
if %1==--install goto install
REM ---- Find DiffMerge ----
if DEFINED ProgramFiles^(x86^) (
Set DIFF="%ProgramFiles(x86)%\SourceGear\DiffMerge\DiffMerge.exe"
) else (
Set DIFF="%ProgramFiles%\SourceGear\DiffMerge\DiffMerge.exe"
)
REM ---- Switch forward slashes to back slashes ----
set oldW=%2
set oldW=%oldW:/=\%
set newW=%5
set newW=%newW:/=\%
REM ---- Launch DiffMerge ----
%DIFF% /title1="Old Version" %oldW% /title2="New Version" %newW%
goto :EOF
REM ---- Install ----
:install
set selfL=%~dpnx0
set selfL=%selfL:\=/%
@echo on
git config --global diff.external %selfL%
@echo off
:EOF
如果您需要在Git 1.6.3之前的版本上配置Git diff工具的Linux版本,这篇简明教程是非常好的参考。
简单来说:
第一步:将以下内容添加到您的.gitconfig文件中:
[diff]
external = git_diff_wrapper
[pager]
diff =
第二步:创建一个名为 git_diff_wrapper 的文件,并将其放在 $PATH 中的某个位置。
#!/bin/sh
vimdiff "$2" "$5"
git difftool --tool=tkdiff <path to the file to be diffed>
你可以把你最喜欢的文件比较工具的可执行文件名称替换掉 tkdiff。只要 (例如 tkdiff) 或者你最喜欢的比较工具在 PATH 环境变量中,它就会被启动。
git difftool
命令。例如,如果你安装了 Meld,你可以通过以下命令编辑分支 master
和 devel
:git config --global diff.external meld
git difftool master..devel
git difftool -tool=opendiff
命令并将opendiff
替换为任何其他工具。 - potenchgit config diff.tool winmerge
。通过输入git difftool
来验证它是否可用。通过输入git config --global difftool.prompt false
来取消提示。我建议使用 p4merge 而不是 winmerge。 - Michael S.