1

我有两台机器,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 帐户”,它具有“合并”选项。然后,我使用“合并”工具单击“合并”选项,但失败并显示如下错误消息。 在此处输入图像描述

非常感谢,

4

3 回答 3

1

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

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

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

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

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

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

编辑: 所以您需要在 Linux 端执行此操作,而您没有Kdiff3. 好的,然后用老式的方式来做:使用命令行和常规编辑器。

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

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

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

PS。如果您不喜欢您拥有的合并工具,请考虑安装 kdiff3 (它可用于 linux,但不知道它有多好用),或者p4merge按照@LazyBadger 的建议。

于 2012-12-08T13:38:05.497 回答
1

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

于 2012-12-08T04:32:52.393 回答
0

旁注

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

关于合并的问题

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

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

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

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

在此处输入图像描述

于 2012-12-08T13:44:57.390 回答