如何通过TortoiseHG合并mercurial?

时间:2012-12-08 02:31:50

标签: mercurial merge tortoisehg

我有两台机器,第7窗口使用TortoiseHG 2.6,Linux使用TortoiseHG 1.5。我使用bitbucket作为一个网站来保存我的集中存储库。窗口机器与bitbucket用户帐户,Cassie-win和linux机器与bitbucket用户帐户Cassie-linux相关联。以下是我执行的步骤。

  • 在butbucket Cassie-linux帐户
  • 创建了一个空的集中存储库
  • 在Linux机器上创建两个本地文件,file1.txt和file2.txt,并将它们推送到Cassie-linux帐户。
  • 将用户Cassie-win添加到存储库
  • 将存储库克隆到窗口机器,在那里对file2.txt进行更改并将其推回到集中存储库。
  • 同时,还对linux机器上的file2.txt进行一些更改并在本地提交
  • 然后我将更改从Cassie-linux帐户的集中存储库提取到我的本地linux机器。现在我的linux本地存储库有两个头,因为file2.txt中的内容不同,我想将它们合并在一起。

我在我的linux机器上使用了TortoiseHG的“merge with”工具来合并这两个头。但是,它一直未能这样做。我试了几百次,不知道我哪弄错了。 file1和file2都是只有三行的测试文件。我还使用命令“hg resolve file2.txt”来检查错误。但是,它只表明合并失败并没有显示太多信息。有谁知道如何使用TortoiseHG合并工具合并两个头?什么可能是阻止TortoiseHG合并两个头的问题?

我嵌入了我在具有TortoiseHg 1.5的Linux机器上拍摄的屏幕截图 enter image description here

我右键点击了“来自Cassie-win帐户”,它有“合并”选项。然后,我使用“合并”工具单击“合并”选项,但它失败并显示如下错误消息。 enter image description here

非常感谢,

3 个答案:

答案 0 :(得分:1)

通过TortoiseHg中的“merge with”,你的意思是你在将工作目录更新到另一个头后,从一个头的上下文菜单中尝试了“与本地合并”吗?如果是这样,你应该看到一个向导带你完成合并的步骤。如果不能自动合并两个头,TortoiseHg会期望你介入。一旦它要求您这样做,您就有一些选项,包括“Mercurial Resolve”和“Tool Resolve”。 如果您可以发布有关合并“失败”时看到的错误的更多详细信息,我们可能会更有帮助。

答案 1 :(得分:1)

首先要做的事情:合并只是创建一个新的文件版本。您必须先提交它才能看到或推送到其他repo克隆。

现在,如果您正在进行合并并且在两个合并父项中都修改了相同的行或相邻行,则自动合并将不会成功,您将被要求选择在每次冲突时要执行的操作点。 Kdiff3,TortoiseHG用于合并Windows上文件的工具并不十分直观,所以这里有一个概述:

  1. 如果要合并多个文件,您将看到一个目录控件。导航到其中一个文件并打开它,这样您就会看到两个文件版本。

  2. 根据具体情况,您现在可能需要激活“合并此文件”(在合并菜单和工具栏上),这将显示文件的第三个版本(合并结果)另外两个。

  3. 您现在可以从更改导航到更改,然后单击AB按钮以选择要使用的更改。请注意,按钮是切换的,可以同时激活这两个版本(将两个版本都导入合并)。另请注意,您还会看到可以自动合并的差异。一般情况下,你可以不管它们(有导航按钮直接进入下一个未解决的差异)。

  4. 一旦你弄清楚如何处理所有这些并为每个差异选择了一个版本,你就可以保存并继续下一个文件。完成后,您的合并就可以提交了。

    修改 所以你需要在Linux端做这个,而你没有Kdiff3。好的,然后按照老式的方式做:使用命令行和常规编辑器。

    1. 当合并失败时,冲突的文件将变为包含两个修订版的上下文差异。用您喜欢的编辑器打开它,仔细查看它并清理每个context-diff区域(当你看到它们时你会知道它们),直到你有一个干净,可用的文件,就像你想要的那样。

    2. 退出,放到命令行并输入hg resolve -m file2.txt。这将从冲突列表中删除该文件。

    3. 当您使用所有冲突的文件(您可以使用hg resolve -l列出它们)时,您将被允许提交,并且您的麻烦已经结束。

    4. PS。如果你不喜欢你已经拥有的合并工具,可以考虑安装kdiff3(它是available for linux,但不知道它的工作情况如何),或{@ 1}} @LazyBadger建议。

答案 2 :(得分:0)

旁注

  1. 您可以在没有“Bitbucket-in-the-middle”的情况下在主机之间交换数据:两台主机上只有hg serve而另一侧只有hg pull <PARTY>
  2. 您可以使用我们的主机中的单个BB帐户(BB端管理较少),并且仅通过变更集中的用户名来区分Bitbucket界面中每个变更集的来源
  3. 关于合并的问题

    当(在任何 SCM中)尝试合并两个不同的编码行时,有两种可能的情况

    • 独立更改不会重叠,可以在没有用户干预的情况下组合成共同的后代。如果这种情况合并“刚刚发生”
    • 更改相交,某些字符串处于冲突状态:即对于某些旧数据,我们有两个不同的更改。在这种情况下,需要用户的选择,SCM或存储合并结果,标记冲突的部分(并在适当的用户操作之前注意合并为不完整和未完成)或运行用户定义的合并解析器(读取“ Visual Merge Tools“)

    在您的情况下,显然,他有第二种情况:合并源中的3个字符串存在冲突,而您尚未在TortoiseHG Diff / Merge工具中配置(TortoiseHG - Global Setting - TortoiseHG

    拥有并添加这些工具将是未来的最佳选择。现在你手动编辑冲突文件并在冲突的行中选择正确的数据,将冲突标记为已解决(检查文件的TortoiseHG上下文菜单),删除临时文件,最后提交合并

    enter image description here