Ott*_*tto 2 merge mercurial dvcs
我刚刚开始使用Mercurial而且我认为我正在尝试做一些非常简单的事情,这应该是非常典型的,但我很难理解为什么它如此复杂,以及为什么它不能按照应有的方式工作( IMO).
我和朋友分享了一些存储库,他做了一些更改并检查了几个文件并推送它们.现在在svn我习惯只是更新我的工作副本并获得他的更改,没有麻烦.但有了mercurial显然我必须合并.我不明白的是:不要善变足够聪明弄清楚,如果我的朋友所做的最新更改,我还没有碰到过的文件,它应该只是用他的版本的文件?显然它无法解决这个问题,而是试图合并完全失败的文件(实际上我已经安装了自动打开的Beyond Compare,所以我不能完全归咎于糟糕的合并).
无论如何,我不知道为什么它甚至必须"合并"文件,这显然(对我来说)它应该只是采取了远程(即最近的)更改.难道我做错了什么在我如何使用工具,或者是有什么我可以做,使之以更简单的方式(我已经习惯了它只是在Subversion工作的方式)工作...有什么配置设置,命令行标志的任何提示,我可以使用它来更好地工作?
如果您已在存储库中提交,则只需合并.如果你与你的朋友共享存储库,他会在你没有做任何事情的时候提交一次或多次,当他完成所有你需要做的就是拉动和更新,没有合并.
如果你已经完成了本地提交,那么这个场景就是如何展开的:
local:    1---2---3---4
central:  1---2---3---4
friend:   1---2---3---4
他承诺:
local:    1---2---3---4
central:  1---2---3---4
friend:   1---2---3---4---5---6
你承诺:
local:    1---2---3---4---X---Y
central:  1---2---3---4
friend:   1---2---3---4---5---6
他推动:
local:    1---2---3---4---X---Y
central:  1---2---3---4---5---6
friend:   1---2---3---4---5---6
你拉:
local:    1---2---3---4---X---Y
                       \
                        +-5---6
central:  1---2---3---4---5---6
friend:   1---2---3---4---5---6
你合并:
local:    1---2---3---4---X---Y---7
                       \         /
                        +-5---6-+
central:  1---2---3---4---5---6
friend:   1---2---3---4---5---6
然后你推,他拉,所有的存储库是相同的.
但是,如果您在项目工作期间没有做任何事情,那么这个场景就是如何展开的:
local:    1---2---3---4
central:  1---2---3---4
friend:   1---2---3---4
他承诺:
local:    1---2---3---4
central:  1---2---3---4
friend:   1---2---3---4---5---6
他推动:
local:    1---2---3---4
central:  1---2---3---4---5---6
friend:   1---2---3---4---5---6
你拉和更新:
local:    1---2---3---4---5---6
central:  1---2---3---4---5---6
friend:   1---2---3---4---5---6
这与Subversion的不同之处在于Subversion你拥有了每个人都必须与之交谈的集中式存储库.
因此,当您开始提交本地更改时,Subversion客户端会说"抱歉,您需要在提交之前进行更新",并且您必须执行该更新.
此时,如果您更改了中央存储库中也更改的文件,Subversion会将您的本地更改与服务器更改合并,并将修订点更新到提示.如果没有冲突,这将是一个静默合并,否则你会遇到合并冲突.
Mercurial做了完全相同的事情,除了合并不是沉默.您可以在您自己的本地存储库中单独提交,而无需相互通信,但是当您尝试将所有更改集成到一个公共存储库时,您需要合并.Mercurial从不更改现有的变更集(除非您使用某些扩展程序进行历史记录编辑),因此它不能自动确定您的并行变更集如何协同工作.
如果你们两个没有处理过相同的文件,或者你们对同一个文件所做的更改没有相互冲突,那么只需点击几下即可完成合并.
无论如何,Mercurial有很多选择,但分布式部分确实改变了你需要考虑历史的方式.