2009-06-14 94 views
2

我正在使用我的伙计nternal:合并工具,因为我不是GUI diff工具的忠实粉丝。我真的很喜欢它,唯一让我感到困惑和不太方便的是它的二进制文件冲突行为。Mercurial internal:合并和二进制文件冲突

它无法合并二进制文件并退出,这是绝对正确的。但是,在具有冲突文件“foo”的目录中,它仅创建“foo.orig”文件。

它至少可以创建“foo.other”,所以我可以选择使用哪个版本的文件(我的或拉的)?

P.S.我在Mercurial邮件列表中提出了同样的问题,但没有人回复我几天,也许我会在这里有更多的运气:)

回答

4

你已经收到了一些输入到你的问题on the Mercurial mailing list - 我继续前进,线程中建议的脚本。这是一个很长一段时间,因为我用颠覆,但我觉得这个简单的脚本做的伎俩:

#!/bin/sh 
cp "$1" "$1.mine" 
cp "$2" "$1.base" 
cp "$3" "$1.other" 
false 

最后false命令使脚本返回一个非零退出代码,信令善变的合并失败。对于Windows,它看起来像这样(感谢帕维尔):

@copy %1 %1.mine 
@copy %2 %1.base 
@copy %3 %1.other 
exit 1 

~/tmp/m.sh保存的Unix版本,并配置有比

[ui] 
merge = ~/tmp/m.sh 

我做了一个仓库有两个头无其他合并设置试了一下,每个文件与JPEG文件有冲突的变化(mg.jpg)。我还为文本文件添加了非冲突的更改(a.txt)。合并了:

% hg --debug merge 
    searching for copies back to rev 1 
resolving manifests 
overwrite None partial False 
ancestor 0848c2f8f8f8 local 845b8aa076bd+ remote f611c55aa8ec 
mg.jpg: versions differ -> m 
a.txt: versions differ -> m 
preserving a.txt for resolve of a.txt 
preserving mg.jpg for resolve of mg.jpg 
picked tool '~/tmp/m.sh' for a.txt (binary False symlink False) 
merging a.txt 
my [email protected]+ other [email protected] ancestor [email protected] 
premerge successful 
picked tool '~/tmp/m.sh' for mg.jpg (binary True symlink False) 
merging mg.jpg 
my [email protected]+ other [email protected] ancestor [email protected] 
merging mg.jpg failed! 
0 files updated, 1 files merged, 0 files removed, 1 files unresolved 
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon 

的好处是,预合并可以通过本身合并a.txt,因此没有a.txt.*文件被创建:

% hg stat 
M a.txt 
M mg.jpg 
? mg.jpg.base 
? mg.jpg.mine 
? mg.jpg.orig 
? mg.jpg.other 

你或许可以微调此脚本进一步满足您的需求 - 如果您这样做,那么请考虑将信息添加到Mercurial wiki中,或者至少在邮件列表中发布您的发现。

+1

它工作得很好,这里的Windows版本以及(不要忘了把它放到一些蝙蝠脚本): @copy%1%1.mine @copy%2%1.base @复制%3%1.other 退出1 我觉得唯一有点误导的是文件的命名。它 原来“.other”实际上是“.mine”,反之亦然:)所以我想 而不是重写这个脚本如下: @copy%1%1.other @copy%2%1。基地 @copy%3%1.mine 退出1 – pachanga 2009-06-18 06:56:22