我使用@ VonC的优秀指令来配置我的开发系统,以便git difftool <BRANCH1> <BRANCH1>调用WinMerge.这是我做的:
放置以下内容~/.gitconfig:
[DIFF]
tool = winmerge
Run Code Online (Sandbox Code Playgroud)
[difftool"winmerge"]
cmd = winmerge.sh \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)
[difftool]
prompt = false
Run Code Online (Sandbox Code Playgroud)创建了一个/usr/bin/winmerge.sh包含以下内容:
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -ub "$1" "$2"
现在,当我尝试通过启动WinMerge时git difftool <BRANCH1> <BRANCH1>,我收到了似乎正确的参数传递:
Launching WinMergeU.exe: /tmp/21qMVb_file1.c /tmp/1ACqik_file1.c
但是,由于一些奇怪的原因,而不是WinMerge并排显示两个文件,它提示输入第一个文件作为右侧,第二个文件接受为左侧:

为什么会这样?我在配置步骤中遗漏了什么?
PS当我在命令行输入时winmerge.sh file1.c file2.c,WinMerge会立即并排显示两个文件,就像我期望的那样.
更新:哦,哇,我刚刚注意到Both paths are invalidWinMerge提示底部的消息(并更新了屏幕截图以强调这一点).看起来这些文件根本不是由difftool生成的,或者路径有问题.
我一直在关注,在"方向由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) 我已经阅读了关于这个主题的大量问答,并遵循了该信的所有指示.但是我仍然头疼,试图将Git设置为使用WinMerge进行差异和合并.
我使用Git终端采取了以下步骤:
git config --global diff.tool winmerge
git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false
Run Code Online (Sandbox Code Playgroud)
我还在我的PATH变量中包含的目录中设置了一个脚本:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" git /e /u /dl "Base" /dr "Mine" "$1" "$2""
Run Code Online (Sandbox Code Playgroud)
当我执行
git mergetool
Run Code Online (Sandbox Code Playgroud)
在Git终端中,我看到:
Merging:
first.txt
Normal merge conflict for 'first.txt':
{local}: modified
{remote}: modified
Launching WinMergeU.exe:
Run Code Online (Sandbox Code Playgroud)
因此在我看来,$LOCAL和$REMOTE变量并没有将任何内容传递给winmerge.sh脚本.我在这做错了什么?我必须在配置部分中假设它.
我喜欢在cygwin上使用git,但我唯一的缺点是当我想要时git difftool我不能使用任何有用的东西.git diff对我来说大部分时间都没问题,但有时候我想用winmerge来查看这些差异git difftool是否有某种方法来设置它?
由于git diff在powershell中主要导致无法读取的空白或奇怪字符,我安装了Perforce P4Merge来处理合并和差异.
但是,我无法git diff打开p4merge应用程序来查看diff.到目前为止,我的.gitconfig看起来像这样:
[diff]
tool = p4diff
[difftool "p4diff"]
external = 'C:/PROGRA~1/Perforce/p4merge.exe "$LOCAL" "$REMOTE"'
prompt = false
[merge]
keepBackup = false
tool = p4merge
[mergetool "p4merge"]
cmd = "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
path = 'C:/PROGRA~1/Perforce/p4merge.exe'
prompt = false
keepBackup = false
keepTemporaries = false
trustExitCode = false
Run Code Online (Sandbox Code Playgroud)
路径是正确的.但是,唉,git仍然试图在使用时在Powershell中呈现差异git diff.
那么这项工作的诀窍是什么?
嗨伙计我正在努力与git制作运行Beyond Compare作为我的difftool.
我正在使用"Git For Windows",Windows 7 32位和Beyond Compare 4
$ git --version
git version 1.9.5.msysgit.1
$ git config --list
[diff]
tool = bc3
[difftool "bc3"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
[merge]
tool = bc3
[mergetool "bc3"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
Run Code Online (Sandbox Code Playgroud)
现在我已经在这里和那里阅读了其他问题,并遵循以下说明:
我已经意识到它总是启动默认的diff控制台查看器/工具(vimdiff,如果我没错),尽管将上面提到的参数'--tool = bc3'或'--tool = anyname'传递给' git difftool'命令.
最后,它只适用于'git mergetool',在这种情况下,无法比较启动,你可以看到参数是相同的.
如果我忘记了某些内容或需要更多细节,请告诉我们谢谢
"当我输入命令git difftool"

我想对项目中的文件运行差异,这应该是一个简单的任务,当我选择与未修改的比较时,我收到错误:
源代码管理 - Git
无法启动配置的比较工具。
我查看了 VS2015 自动生成的 .gitconfig 文件,据我所知,它没有任何问题。
[merge]
tool = vsdiffmerge
[diff]
tool = vsdiffmerge
[core]
editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor
autocrlf = true
[credential]
[filter "lfs"]
clean = git-lfs clean %f
smudge = git-lfs smudge %f
required = true
[difftool]
prompt = false
[difftool "vsdiffmerge"]
cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\vsdiffmerge.exe\" \"$LOCAL\" \"$REMOTE\" //t
[difftool "vsdiffmerge"]
keepbackup = false
[mergetool]
prompt = false
[mergetool "vsdiffmerge"]
cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\vsdiffmerge.exe\" …Run Code Online (Sandbox Code Playgroud) 我可以通过winmerge向我展示修改后的文件的差异。但是对于新文件,winmerge会显示一个对话框,提示“左路径无效!”。我希望它将左窗格显示为空白,而右窗格显示文件的内容。
$ git difftool head^ newfile.txt
Run Code Online (Sandbox Code Playgroud)
winmerge对话框:
我在git版本2.8.2.windows.1上
这是我的difftool的git配置:
[diff]
tool = winmerge
[difftool]
prompt = false
[difftool "winmerge"]
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -ub -wl \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)
我想念什么?
我需要帮助获取git扩展以使用msysgit运行.我对扩展git-tfs和git-fetchall运气不好,在这两种情况下它都是同样的问题.插件需要放置一个文件放在git可以找到它的位置(git-tfs.exe和git-fetchall.sh).我理解这意味着文件需要位于'PATH'环境变量中的目录中.在这两种情况下,我都陷入了困境:
$ git-diffall
bash: git-diffall: command not found
Run Code Online (Sandbox Code Playgroud)
要么:
$ git-tfs
bash: git-tfs: command not found
Run Code Online (Sandbox Code Playgroud)
当我从常规命令shell运行echo%PATH%时,它显示我的路径变量包括git-diffall和git-tfs所在的目录.我怎么调试这个,或者我错过了什么?在msysgit中有没有办法验证命令搜索路径是否符合预期?
我想将我的外部giff diff工具设置为SmartGit,然后在shell中输入git diff,显示SmartGit diff窗口.可能吗?
我知道如何设置外部差异工具.我的问题是,是否存在SmartGit的可执行文件,仅显示差异,或者是否有其他方法可以执行此操作.
在执行 时git diff,有时我想使用不同的 diff 工具(例如,cmp或者我自己的 bin 目录中的自制 word-diff 程序)。
许多类似 diff 的程序都有一个类似的选项
-D <diffprog>
Run Code Online (Sandbox Code Playgroud)
告诉他们使用其他 diff 或类似 diff 的程序。
我知道 git-difftool 和这个问题,但这并不是我想要的。我非常不想提前配置某些东西,并且我今天想要使用的非标准命令可能不是我明天想要使用的非标准命令。理想情况下,我希望能够从命令行一次性完成此操作。
(是否可以将 difftool 配置为能够使用官方列表中未列出的多个非标准工具?)
git diff如果使用我选择的 diff 工具太麻烦,我也可以使用类似的工具
git cat file | mydiff - file
Run Code Online (Sandbox Code Playgroud)
我知道没有“git cat”这样的命令。但这里的想法是手动将文件的存储库版本与本地版本进行比较,给出 git 命令来简单地发出文件的存储库(或在其他情况下,索引)版本。有这样的命令吗?
最后,如果没有git diff -D diffprog我所询问的假设选项,并且如果没有我假设的“git cat”命令之类的东西,那么我希望它们是错误的吗?
我想使用xxdiff来满足我的合并需求.我刚刚开始使用git,我集成了xxdiff来处理它(git mergetool).
我的问题是我找不到任何教授与xxdiff合并分支的基本资源,所以我用LOCAL BASE REMOTE进入这个三个文件窗口,但我不知道从哪里开始完成我的合并.
有人能指出我很快就能学习xxdiff合并基础吗?
非常感谢你.
我喜欢 Git 的简单性,但我很难有效地使用它。
是否可以使用 Git 执行以下操作(在我的本地开发计算机上):
D:\gitrepo)
关于如何在 git 中进行上述操作有什么建议吗?