【问题标题】:Mercurial internal:merge and binary file conflictsMercurial internal:merge 和二进制文件冲突
【发布时间】:2009-06-14 06:14:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mercurial merge binary


    【解决方案1】:

    您已经对您的问题on the Mercurial mailing list 提出了一些意见——我继续尝试制作线程中建议的脚本。我已经很久没有使用 Subversion 了,但我认为这个简单的脚本可以解决问题:

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

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

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

    我将 Unix 版本保存在 ~/tmp/m.sh 中,并在没有配置其他合并设置的情况下进行了尝试

    [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 a.txt@845b8aa076bd+ other a.txt@f611c55aa8ec ancestor a.txt@0848c2f8f8f8
     premerge successful
    picked tool '~/tmp/m.sh' for mg.jpg (binary True symlink False)
    merging mg.jpg
    my mg.jpg@845b8aa076bd+ other mg.jpg@f611c55aa8ec ancestor mg.jpg@0848c2f8f8f8
    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 或至少将您的发现发布到邮件列表中。

    【讨论】:

    • 它工作得很好,这也是 Windows 版本(别忘了把它放到一些 .bat 脚本中):@copy %1 %1.mine @copy %2 %1.base @copy %3 %1.other exit 1 我发现唯一有点误导的是文件的命名。原来“.other”实际上是“.mine”,反之亦然:)所以我宁愿重写这个脚本如下:@copy %1 %1.other @copy %2 %1.base @copy %3 %1.mine 出口 1
    • 糟糕,stackoverflow 搞砸了我的缩进 :(
    • 我已将您的 Windows 版本放入答案中以获得正确的格式,谢谢!
    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多