使用Windows,Mercurial和extdiff扩展(对于Mercurial)。我试图设置extdiff来使用WinDiff作为外部差异工具,但我认为我已经将问题缩小到足以说明问题在于甚至还没有达到目标。Mercurial/extdiff不会更改为临时目录(因为我认为它应该)
从我所了解的extdiff中,它只是调用你的cmd.winmerge程序,并将必要的目录传递给它。我也工作过这里列出一些假设的(这可能会或可能不准确,我只是学习水银):
它说:
The extdiff (visual diff) extension works like this:
1-Generate temporary directory(ies) for older changesets
2-run util.system(cwd=tempdir, "yourdiff tool dir1 dir2")
util.system does:
2.1 store cwd;
2.2 cd tempdir
3-run your diff tool, wait for it to exit
4-cd oldcwd
5-Then finally extdiff deletes the temp directories.
的麻烦我的意思是extdiff在继续之前似乎没有改变到临时目录中,因为它看起来应该在上面的步骤2.1中进行。
在试图找出问题时,我写了一个批处理文件,以查看cd是什么,传递了什么以及传递的具体方式。批处理文件如下:
@echo off
echo %cd%
echo %1
echo %2
D:\Documents\apps\WinMergePortable\App\WinMerge\WinMergeU.exe %1 %2
然后,我设置了extdiff以使用此批处理文件作为我的extdiff程序。这是有效的,但我发现当它响应%cd%时,它就像预期的那样只是c:\,而不是c:\ temp。我已经验证过extdiff是在临时目录中创建临时文件(因为它应该按照上面的步骤1;类似于c:\ temp \ extdiff.xxxxxx \ someFolder.someChangesetID \ file.ext),所以我知道它是查看这些目录。在调用WinMerge之前,它没有正确地改变它们,所以当打开WinMerge时,它看不到临时文件(因为它不在正确的工作目录中)。
这基本上就是我卡住的地方。我不知道还有什么要离开这里。我想的只是把
cd %tmp%
在我的批处理文件,但仍然无法抓住它extdiff在创建临时文件的extdiff.xxxxx \子目录
总结::-(
编辑:更改批处理文件
@echo off
echo %cd%\extdiff*
echo %1
echo %2
D:\Documents\apps\WinMergePortable\App\WinMerge\WinMergeU.exe %1 %2
似乎使它的工作(注意改变第二行),但它似乎仍然是一个讨厌的黑客,而不是它应该如何工作。 : - \
编辑:这里是我的Mercurial.ini文件:
[ui]
username = Tim Skoch <[email protected]>
editor = D:\Documents\apps\Notepad++\notepad++.exe -multiInst
[extensions]
hgext.graphlog =
hgext.extdiff =
[extdiff]
cmd.winmerge = d:\Documents\apps\mercurial\diff_winmerge.bat
第一段是指WinDiff(我从Windows SDK中识别),而不是WinMerge。 – 2010-07-20 20:55:40
查看“Mercurial.ini”或“.hg \ hgrc”的相关部分将会很有帮助。 – 2010-07-20 20:56:50
我已经添加了我的Mercurial.ini文件;我认为没关系,因为它看起来很好(但是我再次发帖寻求帮助,所以我显然不是100%自信)。只是CWD没有得到适当的改变。 – loneboat 2010-07-20 21:32:12