仅当您也在存储库中提交时才需要合并。如果你与你的朋友共享存储库,他会在你不做任何事情时提交一次或多次,当他完成后,你所要做的就是拉取和更新,而不是合并。
如果您已完成本地提交,则场景将如下所示:
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 有很多选择,但分布式部分确实改变了您思考历史的方式。