【问题标题】:How to merge in mercurial by TortoiseHG?TortoiseHG 如何在 mercurial 中合并?
【发布时间】:2012-12-08 02:31:50
【问题描述】:

我有两台机器,window 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 的“合并”工具来合并这两个头。然而,它一直未能如愿。我试了几百次,不知道我哪里弄错了。 file1 和 file2 都是只有三行的测试文件。我还使用命令“hg resolve file2.txt”来检查错误。但是,它只显示合并失败,并没有显示太多信息。有谁知道如何使用 TortoiseHG 合并工具来合并两个头?阻止 TortoiseHG 合并两个头可能是什么问题?

我嵌入了我在装有 TortoiseHg 1.5 的 Linux 机器上截取的屏幕截图。

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

非常感谢,

【问题讨论】:

  • 你的 Linux 发行版是 ...

标签: mercurial merge tortoisehg


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    编辑: 因此,您需要在 Linux 端执行此操作,而您没有 Kdiff3。好的,那就用老式的方式来做吧:使用命令行和常规编辑器。

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

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

    3. 当您对所有有冲突的文件(您可以使用hg resolve -l 列出它们)完成此操作后,您将被允许提交,您的麻烦就结束了。

    PS。如果您不喜欢现有的合并工具,请考虑安装 kdiff3(它是 available for linux,但不知道它的效果如何)或 @LazyBadger 建议的 p4merge

    【讨论】:

    • 我的 linux 机器上没有 kdiff3。:
    【解决方案3】:

    旁注

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

    关于合并的问题

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

    • 独立更改不重叠,无需用户干预即可合并为共同后代。如果这种情况合并“刚刚发生”
    • 更改相互交叉,一些字符串处于冲突状态:即我们对一些旧数据有两个不同的更改。在这种情况下,需要用户选择并且 SCM 或存储带有冲突部分的合并结果(并在适当的用户操作之前将合并记录为不成功和未完成)或运行 用户定义的合并解析器(阅读“视觉合并工具")

    显然,在您的情况下,他有第二种情况:merge-sources 中来自 3 的某些字符串发生冲突,并且您尚未在 TortoiseHG Diff/Merge 工具中进行配置 (TortoiseHG - Global Setting - TortoiseHG)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多