如何使用 msysgit / gitk 设置 DiffMerge?
我刚刚开始使用 Git,可能错过了一些明显的东西,但这里是:
- 我在 Windows XP 上使用 msysgit 1.6.2.2
- 安装时,我选择了选项 1“仅使用 Git Bash”
我正在尝试组合一个包装器脚本,我可以用它来用 DiffMerge 替换内置的 git diff。 基于此线程 ,我创建了以下批处理文件:
@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%
我将 bat 文件放在 %GIT_INSTALL%/cmd 下,并编辑了我的 .gitconfig 文件,如下所示:
[diff]
external = C:/Programs/git/cmd/git-diff-wrapper.bat
如果我启动 Git Bash 并执行 git diff HEAD HEAD~ -- myfile
我收到一条消息 File (\dev\null) not found
- 考虑到我在 Windows 上,这并不奇怪。
继续按,我启动了 gitk,并在“编辑”>“首选项”下,选择了相同的包装器脚本。 尝试特定文件的“外部差异”选项会给出神秘的错误消息未知选项“
显然,我不知道我在做什么了,所以任何帮助将不胜感激。
I've just started using Git and it's possible I've missed something obvious, but here goes:
- I'm using msysgit 1.6.2.2 on Windows XP
- While installing, I picked option 1 to "Use Git Bash only"
I'm trying to put together a wrapper script that I can use to replace the built in git diff with DiffMerge. Based on this thread on SO, I created the following batch file:
@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%
I placed the bat file under %GIT_INSTALL%/cmd and edited my .gitconfig file as follows:
[diff]
external = C:/Programs/git/cmd/git-diff-wrapper.bat
If i launch Git Bash and execute
git diff HEAD HEAD~ -- myfile
I get a message File (\dev\null) not found
- which given I'm on Windows is not surprising.
Pressing on, I launched gitk and under Edit>Preferences, I chose the same wrapper script. Trying the "external diff" option for a particular file gives the cryptic error message Unknown Option "
Clearly, I have no idea what I'm doing anymore so any help would be much appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我在互联网上到处寻找这个问题的答案。 我尝试了上面和其他地方的所有解决方案。 我可以让合并部分工作,而不是差异部分,反之亦然。 所以我最终所做的就是根据我在互联网上获得的所有对我有用的信息,拼凑出我自己的简单解决方案。
它不需要任何脚本,只需编辑
.gitconfig
,它通常位于以下目录C:\Documents and Settings\[username]
您需要DiffMerge 程序已安装。这是我的 .gitconfig 文件的相关摘录。 您只需编辑
DiffMerge
版本所在的路径即可。 注意,我在路径中使用了旧的 DOS 8.3 格式如果您愿意,您也可以使用命令
git config --replace --global [options]
进行设置。这个简单的解决方案也非常适合我。 对于较新版本的 DiffMerge (3.3.1),需要更改命令路径:
I looked all over the internet for the answer to this. I tried all of the solutions above and elsewhere. I could get the merge part to work and not the diff part or vice versa. So what I did eventually was to hack together my own simple solution from all the info I got on the internet which works for me.
It does not require any scripts only that you edit your
.gitconfig
which normally resides in the following directoryC:\Documents and Settings\[username]
You'll need to have DiffMerge program installed already.Here is relevant extract of my
.gitconfig
file. You'll just need to edit the path to where your version of ofDiffMerge
is. Note that I used the old DOS 8.3 format in the pathYou can also set it up using the commands
git config --replace --global [options]
if you so wish.This simple solution works perfectly for me, too. For more recent versions of DiffMerge (3.3.1), the command path needs to be changed:
我刚刚经历了一些类似的经历 使用 msysgit1.6.2.2 将 Notepad++ 设置为我的外部编辑器。
关键是要认识到包装器不是 DOS 脚本,而是 /bin/sh 脚本。
所以尝试放入你的“.bat”(即使它不完全是一个bat脚本,扩展名在这里并不重要):
不要担心让所有的'
\
'变成'/
':它是由 Git 脚本调用外部 diff 工具来完成的。我没有使用 DiffMerge 对其进行测试,但使用 WinMerge,无论是在 DOS 会话还是在 Git Shell 中,它都工作得很好。
(使用“
-e
”选项,我只需键入“ESC
”即可关闭并退出 diff 工具:效果很好!)average_geek 在评论中添加:
1/ 实际上有一种方法可以查看传递的参数是什么!
在
C:\Program Files\Git\libexec\git-core\git-sh-setup
文件中添加以下行:您将看到正在调用什么编辑器以及什么参数。
现在,关于“意外参数”部分:
当我使用“
/e /ub
”而不是“-e -ub
”调用 WinMergeU.exe 时,我确实遇到了同样的错误,所以第一个问题是:< br>您确定“
/title1
”位不能用作“-title1
”或“-t1
”或“--title1
" 或 "--t1
" ? 这就是从 第 9 章“命令”中可以看到的DiffMerge pdf 文档中的“行参数”。如果没有,我怀疑一些双引号是为了正确分隔不同的参数。 例如:
但我的钱宁愿采用“
-title1
”或“-t1
”形式:应该可以正常工作。
I just experienced a somewhat similar experience with setting Notepad++ as my external editor with msysgit1.6.2.2.
The key was to realize the wrapper was not a DOS script, but a /bin/sh script.
So try to put in your ".bat" (even though it is not exactly a bat script, the extension is not important here):
Do not worry about making all the '
\
' go '/
': it is done by the Git scripts calling the external diff tool.I did not test it with DiffMerge, but with WinMerge, it works just fine, both from a DOS session or a Git Shell.
(with the '
-e
' option, I have just ot type on 'ESC
' to close and quit the diff tool: that works great!)average_geek adds in the comments:
1/ There actually is a way to see what are the parameters getting passed!
Add the following line in the
C:\Program Files\Git\libexec\git-core\git-sh-setup
file:You will see what editor is being called, with what parameter.
Now, regarding the "Unexpected parameter" part:
I did have the same kind of error when I called WinMergeU.exe with "
/e /ub
" instead of "-e -ub
", so first question is:Are you sure that the "
/title1
" bit could not be used as "-title1
" or "-t1
" or "--title1
" or "--t1
" ? That is what Is can see from the chapter 9 "Command Lines Arguments" of the pdf documentation of DiffMerge.If not, I suspect some double quotes are in order for delimiting properly the different parameters. Something like:
But my money would rather be on the "
-title1
" or "-t1
" form:should work just fine.
这对我来说如下:
在
~/.gitconfig
中:在
C:\Program Files\Git\cmd\git-diffmerge-merge.sh
中:的一部分信用转到 http://therightstuff.de/ 2009/01/28/设置-SourceGear-DiffMerge-With-Git.aspx;)
This works for me with as follows:
In
~/.gitconfig
:In
C:\Program Files\Git\cmd\git-diffmerge-merge.sh
:Part of the credit goes to http://therightstuff.de/2009/01/28/Setting-Up-SourceGear-DiffMerge-With-Git.aspx ;)
VonC - 切换到 -t1 和 -t2 修复了错误。 Diffmerge 现在适用于 git bash :)
经过一番研究 gitk 补丁 添加了外部差异支持,我意识到它直接使用两个文件作为参数调用外部差异程序。 所以我修改了 gitk>Edit>Preferences 并将以下命令直接放入外部 Diff Tool 选项中:
现在我也有 DiffMerge 适用于 gitk :-)
VonC - switching to -t1 and -t2 fixed the errors. Diffmerge now works for git bash :)
After a little bit of poking at the gitk patch that added External Diff support, I realized that it's calling an External Diff program directly with the two files as arguments. So I modified gitk>Edit>Preferences and put the following command directly into the External Diff Tool option:
Now I have DiffMerge working for gitk too :-)