2012-01-25 99 views
12

我对Mercurial和Python感到沮丧,因为它让事情变得很容易。我有一个小小的冲突,因为水银不给任何建议做我甚至不知道如何解决这个简单的文件冲突:如何解决这个Mercurial冲突?

KDiff3

的冲突是微不足道的,但如果我解决不了这我也解决不了任何复杂的问题。我可以按照我想要的方式编辑文件并从任何地方再次提交吗?我应该跑hg merge?为什么Mercurial甚至不能让我选择一个版本来保存?为什么没有挖掘1000个写得不好的手册是不可能做到的事情?

+1

只是为了记录,这不是关于Mercurial和Python使事情变得困难,而是关于'kdiff3'程序的使用。 – Tobias

回答

24

您需要查看KDiff3 documentation,特别是关于merging and the output window的部分。要解决冲突,您需要确定livejanuary是否是该行的正确选择。这个决定是你自己做的,没有工具可以知道你是否意味着这个或那个。

在KDiff3,按下Ctrl键+ 到选择live,按Ctrl键+ 到选择在窗口底部的边缘january或右键单击,然后选择你想要的行。您也可以点击底部窗口并手动编辑该行。

Mercurial让你configure your merge tool任何你喜欢的方式。 TortoiseHg提供了一个默认配置,可以将KDiff3置于列表顶部,但如果您愿意,您可以使用其他工具。合并工具实际上只是一个接受四个文件名的程序:要比较的三个文件(base,parent 1,parent 2)和一个输出文件名。

要解决命令行上的冲突,您需要启动合适的命令行三向合并工具。如果你喜欢,你可以例如merge with vim。 (恐怕我不知道Vimdiff可以任何东西,我用KDiff3自己。)

如果你不喜欢看合并工具弹出,那么你可以设置

[ui] 
merge = internal:merge 

使Mercurial仅使用内部三路合并器。当编辑没有冲突时它会合并文件。当发生冲突时,文件被标记为“未解决”,冲突标记存储在文件中。

然后您需要手动编辑文件以获取所需的版本。您也可以重新合并,并选择在本地(你的)版本:

$ hg resolve --tool internal:local your-file 

或其它版本:

$ hg resolve --tool internal:other your-file 

您与hg resolve your-file完全重新启动合并。在提交之前,文件需要标记为“已解决”。这是通过hg resolve --mark your-file完成的。有关当前合并的状态,请参阅hg resolve --list

+0

谢谢Martin。如果可行的话,我也希望能够在命令行解决问题。 –

+1

你说得对 - KDiff3没有最直观的界面。你会发现,在一段时间后感觉非常简单,但很容易忘记它在第一次弹出时是如何吓唬屏幕的。顺便说一下,您还可以使用工具栏中的“A”,“B”和“C”按钮来决定保留哪个位。 –

+0

@NickRosencrantz:我已经添加了一些关于如何配置合并工具的信息。 –

19

基础版是您本地系统中的以前版本, 父母1是您当前的更改, 父母2是来自服务器的文件。

如果您需要更改需要签入,请在合并菜单的任意位置选择B. 如果您想要本地机器上的最新服务器版本,请在合并菜单中的任意位置选择C

+5

谢谢!你怎么知道“基地”是以前的版本?用google搜索了一个小时以了解神秘而毫无意义的“基础”,“父母1”,“父母2”的话,天​​哪! – Slav