关于merge:Mercurial协作在使用中央存储库时导致多次提交相同的更改

mercurial collaboration results in multiple commits of the same changes when using central repository

我一直在使用带有中央存储库的Mercurial。当我们两个或两个以上致力于变更时,我们会在本地进行更改。在某些时候,我们会将这些更改推回到中央存储库中。

当我拉扯时问题就来了。通常,有些文件是由另一位开发人员修改并推送的,而这些文件会通过拉动而放到我的存储库中。然后,我需要合并,这向我显示了本地存储库和提交的文件之间的区别。

困扰我的是我必须合并并提交。这被推回到中央服务器,该中央服务器似乎已经提交了两次相同的更改,一次是作为我的合并,另一次是来自其他开发人员的变更集。

是否可以通过某种方式来更新我的存储库,并让我没有碰过的文件只是被更新,而不是两次记录完全相同的更改,一次是来自原始开发人员,一次是在合并中?

这个问题似乎提出了相同的观点,但是没有提供我的问题的答案:
合并时为什么会出现水银哑音?如何使拉/合并更改更简单?


根据变更集和修订版本进行水银工作。

变更集是进行修订的变更的快照。

如果仅成功更新已更改的文件,则在拉动时,您的工作文件夹中将没有实际的修订版本,您将拥有混蛋的修订版本,只有您和您的机器才知道如何成为了。在其他时间拉动的其他人将获得不同的混蛋修订,并且他们不会排队。

因此,不行,Mercurial的设计工作原理与您说的完全一样,只是它并没有真正显示两次发生的更改,如果这样做似乎一定是您做错了。 >

换句话说,如果我更改某些内容并提交,那么我会拉下您的更改,进行合并,然后提交,合并提交将仅包含我为解决合并而必须做的任何更改。如果合并是自动的,则不需要解决任何冲突,就好像您只是在提交带有两个父级的空变更集一样。

现在,有减轻所有分支的方法,例如,您可以使用rebase。

将发生以下情况:

1
2
3
central: 1---2---3---4

local:   1---2---3---4

您更改了某些内容

1
2
3
central: 1---2---3---4

local:   1---2---3---4---5

其他人更改了某些内容,然后按下:

1
2
3
central: 1---2---3---4---5'--6'

local:   1---2---3---4---5

(我在5后面使用'来表明,虽然它是该存储库中的修订版5,但与其他存储库中的修订版5并不相同。)

然后当您拉动时,它看起来像这样:

1
2
3
4
5
central: 1---2---3---4---5'--6'  <-- corresponds to these <--+
                                                             |
local:   1---2---3---4---5                                   |
                      \\                                      |
                       6'---7'   <-- note that these gets renumbered

然后将5重新设基到7'的顶部,然后得到以下信息:

1
local:   1---2---3---4---6'--7'--5

如果需要,如果进行了有冲突的更改,则在重新设置基准时会发生合并。重新设置基准后,您可以进行推送。它基本上使您的修订历史记录看起来像轮流工作。


简短的回答是"不用担心"。在您看来,此人所做的更改是您在后续合并中再次完成的,但这仅仅是因为'diff'在任何VCS中都没有很好的方式来显示合并。改变是他们的,结合是您的,整个事情就解决了。起诉DVCS的两个人最终都有一段看起来像编织绳的历史,这没关系。