当我输入时git diff,我想用我选择的视觉差异工具(Windows上的SourceGear"diffmerge")查看输出.如何配置git来执行此操作?
我刚刚开始使用Git而且我可能错过了一些明显的东西,但是这里有:
我正在尝试整理一个包装脚本,我可以使用它来用DiffMerge替换内置的git diff.基于SO 上的这个线程,我创建了以下批处理文件:
@echo off
REM ---- Switch forward slashes to back slashes ----
set oldW=%2
set oldW=%oldW:/=\%
set newW=%5
set newW=%newW:/=\%
REM ---- Launch DiffMerge ----
"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" %oldW% /title2="New Version" %newW%
Run Code Online (Sandbox Code Playgroud)
我将bat文件放在%GIT_INSTALL%/ cmd下并编辑了我的.gitconfig文件,如下所示:
[diff]
external = C:/Programs/git/cmd/git-diff-wrapper.bat
Run Code Online (Sandbox Code Playgroud)
如果我启动Git Bash并执行git diff HEAD HEAD~ - myfile
我收到一条消息File (\dev\null) not found- 鉴于我在Windows上并不奇怪.
按下,我启动了gitk,在Edit> Preferences下,我选择了相同的包装脚本.尝试特定文件的"外部差异"选项会产生神秘的错误消息Unknown Option "
很明显,我不知道我在做什么,所以任何帮助都会非常感激.
所以,我已经看到了有关获取DiffMerge是几个问题mergetool,并difftool为饭桶.从本质上讲,它归结为你的PATH和一个.gitconfig看起来像的DiffMerge(sgdm.exe):
[diff]
tool = DiffMerge
[difftool "DiffMerge"]
cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' "$LOCAL" "$REMOTE"
[merge]
tool = DiffMerge
[mergetool "DiffMerge"]
cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' -merge -result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
trustExitCode = true
keepBackup = false
Run Code Online (Sandbox Code Playgroud)
当我跑步时git difftool file1 file2,没有任何反应.没有错误代码,也没有启动DiffMerge.从Git Bash和Windows命令行,我可以运行sgdm file1 file2并且出现DiffMerge.
我已经修改了cmd在.gitconfig不具有路径或扩展名(如sgdm只),但仍无济于事.
有没有遇到过这个?有什么明显的东西我不见了吗?我觉得我错过了一些明显的东西.
我使用TFS进行源代码控制,但我想使用SourceGear DiffMerge来查看文件差异并进行合并.我找到了工具 - >选项 - >源代码控制 - > Visual Studio Team Foundation Server - >配置用户工具对话框,但设置合并参数非常混乱.这些参数应该是什么?

在OSX上,我使用diffmerge作为我的git diffing工具.这是我的.gitconfig:
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = diffmerge \"$LOCAL\" \"$REMOTE\"
[alias]
d = difftool --no-prompt
Run Code Online (Sandbox Code Playgroud)
如果我只是使用git difftool它会提示我我想要的每个文件.为了解决这个问题,我创建了git d别名并添加了--no-prompt标志.
有没有办法可以防止重复提示没有别名?我尝试插入prompt=false并prompt = NO在difftool下,以及移动diffmerge命令旁边的--no-prompt标志,但这些都没有帮助.
我已使用以下说明将Sourcegear DiffMerge配置为我的默认git合并工具:
git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "diffmerge \"\$LOCAL\" \"\$REMOTE\""
git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd "diffmerge --merge --result=\"\$MERGED\"
\"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""
git config --global mergetool.diffmerge.trustexitcode false
Run Code Online (Sandbox Code Playgroud)
资料来源:http://www.andrejkoelewijn.com/wp/2010/01/08/configure-diffmerge-with-git/
但是,当我运行时,git mergetool我收到以下错误:

这个问题可能是什么原因?
我一直在关注,在"方向由Dave博客条目在这个环节" 答案是我在Windows 7和做使用SourceGear的DiffMerge工具.我已将git\cmd目录添加到我的PATH系统变量并将我的git-diff-diffmerge-wrapper.sh文件放在那里:
#!/bin/sh
"C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$1" "$2" | cat
Run Code Online (Sandbox Code Playgroud)
(是的,这是DiffMerge的正确路径.)
我已经编辑了我的.gitconfig文件以包含diff和difftool块(我直接从帖子中复制了行,他确实留在了注释掉的#external行.我把它添加到我文件的末尾;那可以吗?)
[diff]
# external = git-diff-wrapper.sh
tool = diffmerge
[difftool "diffmerge"]
cmd = git-diff-diffmerge-wrapper.sh "$LOCAL" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)
所以我git bash去做,git difftool HEAD~ 67b8679 -- js/site/pizzabuilder.js然后点击进入.什么都没发生.如果我这样做git difftool HEAD~ 67b8679,留下我想要的文件,我得到这个:
Viewing: 'js/angular/hutlovers/hutlovers.js'
Launch 'diffmerge' [Y/n]: Y
C:\Program Files (x86)\Git/libexec/git-core/mergetools/defaults: line 17: git-diff-diffmerge-wrapper.sh: command not found
Viewing: 'js/angular/localization/StoreListCtrl.js'
Launch 'diffmerge' [Y/n]: n
Viewing: …Run Code Online (Sandbox Code Playgroud) 我目前正在使用命令hg diffmerge -r 32 -r 30 myfile,但这只显示两个窗口,而不是三个窗口.如何让它进行三向合并?
.hgrc
[ui]
merge=diffmerge
[extensions]
collapse=~/.hgext/collapse.py
hgext.purge=
hgext.extdiff=
hgext.graphlog=
[extdiff]
cmd.diffmerge=/usr/bin/diffmerge
[merge-tools]
diffmerge.executable=/usr/bin/diffmerge
diffmerge.args= --result=$output -t1="Local Version" -t2=$output -t3="Other Version" --caption=$output $local $base $other
diffmerge.binary=False
diffmerge.symlinks=False
diffmerge.gui=True
diffmerge.premerge=True
Run Code Online (Sandbox Code Playgroud) 第一个消息对话框错误是:
\n\n\n\n\nDifftool 想要访问 \xe2\x80\x9c~/Library/Application/Scripts/net.langui.SnailSVN.DiffTool
\n
单击“授权”按钮后,第二个消息对话框是:
\n\n\n\n无法将 difftool.sh 安装到脚本目录!
\n
\n 消息 \xe2\x80\x93 \xe2\x80\x9cdifftool.sh\xe2\x80\x9d 无法复制\xe2\x80\x99,因为您\xe2\x80\x99t 无权访问 \xe2\x80\ x9cnet.langui.SnailSVN.DiffTool
最近,我重新安装了macOS。我已经安装了Sourctree和diffmerge并将diffmerge设置为默认合并工具。出于某种原因,每次我选择“解决冲突->打开外部合并工具”时,sourcetree都会打开其等待视图并直接将其关闭。
我在sourcetree中的设置页面:
这是当sourcetree为我配置diff合并时我的根.gitconfig的样子:
[core]
excludesfile = /Users/[username]/.gitignore_global
[user]
name = ---- -----
email = -----@-----.--
[commit]
template = /Users/[username]/.stCommitMsg
[credential]
helper = !/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java -Ddebug=false -Djava.net.useSystemProxies=true -jar /usr/local/Cellar/git-credential-manager/2.0.4/libexec/git-credential-manager-2.0.4.jar
[difftool "DiffMerge"]
[mergetool "DiffMerge"]
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = /usr/local/bin/diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
tool = diffmerge
[mergetool "diffmerge"]
trustExitCode = true
cmd = /usr/local/bin/diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
[difftool "sourcetree"]
cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge --nosplash \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
trustExitCode …Run Code Online (Sandbox Code Playgroud) 我试图在Git中将DiffMerge配置为我的difftool,但没有运气.这是我的.gitconfig文件的一个重要部分(未显示的其他设置仅适用于用户).
[diff]
tool = diffmerge
[difftool "diffmerge"]
cmd = \"C:\\Program Files\\SourceGear\\Common\\DiffMerge\\sgdm.exe\" \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)
每当我git difftool从powershell命令行调用时,冲突都会直接显示在powershell界面的下方,而不是按预期在diffmerge中显示.我知道git会选择设置,因为当我检查全局配置时,我会从配置文件中获取设置:
git config --global --get-all difftool.diffmerge.cmd
"C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$LOCAL" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)
我正在运行powershell而不是git bash.这是因为我为windows安装了github,它提供了powershell作为git的shell,所以我不需要安装bash(还).Git版本是1.7.11.msysgit.0.
diffmerge ×11
git ×7
git-config ×2
macos ×2
bash ×1
diff ×1
difftool ×1
git-difftool ×1
mercurial ×1
msysgit ×1
powershell ×1
svn ×1
tfs ×1
windows ×1
windows-xp ×1