Mercurial update-pull vs commit



我很难理解mercurial下的场景。

假设我有2个用户在同一个存储库上工作。假设回购名为"Test",它目前有以下文件:B.txt(两个文本文件目前都是空的,没有文本)

结果如下:

用户1:

用句子"Line 1"修改a.t txt将代码提交到本地repo(没有发出push命令)

用户2:

用句子"Line 1"修改b.txt将代码提交到本地仓库也发出一个push命令

用户1:

发出拉命令发出更新命令

结果:在用户1的工作目录中,文件a.txt不再包含句子Line 1,文件b.txt包含用户2的更改。a.t txt的初始更改到哪里去了?覆盖?我可以在历史日志中看到它们(使用TortoiseHG),但这些更改已经不在提示处了。

这里到底发生了什么?我的理解如下:当用户1发出pull时,他的本地repo上的更改应该以某种方式将来自用户2的更改与用户1已经提交的更改合并在一起。

你能告诉我我的假设/理解哪里错了吗?如果上述问题的解决方案是关于提交/推送/更新/拉取的适当顺序,那么对于同一代码上的多个开发人员的环境,建议的操作顺序是什么?

User1 pull时,User2的变更集被放在repo的顶端。当他发出hg update命令时,Mercurial更新到当前分支的最新提示,即User2的更改集,而不包含User1的修改。

User1现在在他的repo上有两个头,他自己的更改集和User2的更改集。为了获得两个变更集的组合,他必须通过发出hg merge命令来合并两个head,该命令将合并当前分支的两个head。也不要忘记提交合并的变更集。

合并操作不是自动完成的,Mercurial不会为您做决定。在推送之前,您可能想要对您的更改集做其他事情。

例如,对于这个合并操作,一个更好的替代方法是使用Rebase扩展,将两个变更集按顺序放置,然后发出这个命令
hg rebase -s <User1-revision> -d <User2-revision>
hg update

你基本上是在重新排序更改集,就好像User1的修改是在User2的修改之后进行的,User2已经公开并且是repo的一部分,通过在提示上重新基于它们。如果User1的变更集还没有推送给公众,那么这种替代方法可以很好地工作。

最新更新