0

我们正在使用 mercurial/tortoisehg 和一个托管在 kiln 上的中央存储库。

我们已经将我们正在做的事情缩小到最简单的可能场景。该场景从 Bob 和 Joe 克隆了 kiln 存储库开始,因此他们都从相同的集合开始。

  1. Bob 更改文件 a.txt,提交并将其推送到 kiln。
  2. Joe 更改文件 b.txt 并提交。
  3. Joe 尝试推送到窑,但出现以下错误:远程在分支“默认”上有头,本地不知道:503dc02bd36c 中止:推送创建新的远程头 dba053a5be68!
  4. 这显然是由于 Bob 的更改需要先从窑中拉出。所以,乔从窑中拉出变化并成功
  5. Joe 尝试推送到窑,但收到以下错误:中止:推送创建新的远程头 dba053a5be68!
  6. 乔将他的提交与本地合并并成功
  7. 乔现在尝试推窑并成功

在这种情况下,Mercurial 似乎应该检测到两个用户都更新了不同的文件而不是强制合并,这本质上是 Joe 拉动 Bob 的更改并且不得不重新提交并推送两个用户的更改。

感谢大家。澄清我的问题:我们很好奇我们是否错过了某些东西,或者这就是它的工作原理。在这种情况下,即使合并期间没有冲突,hg 仍然迫使我必须拉取、合并、重新提交和重新推送我同事已经提交并推送到中央存储库的更改。

4

1 回答 1

1

这就是 Mercurial 的工作原理。

如果 Joe 没有更改,则不需要合并或合并提交,他可以使用hg update tipor hg pull。但是,由于 Joe 在发出拉取请求时进行了更改,即使它们不在同一个文件中,也需要合并。

此信息可在 Mercurial 的指南中找到: https ://www.mercurial-scm.org/guide

如果您在项目中没有做任何更改,当您在处理 feature1 时,您可以只更新到 tip (hg update tip),但您更有可能在更改之间进行了一些其他更改。在这种情况下,是时候合并了。

将 feature1 合并到项目代码中

$汞合并

如果存在冲突,请使用 hg resolve - 这也是 merge 告诉您在发生冲突时要做的事情。合并后,您必须明确提交以使您的合并最终

$ hg 提交

于 2016-02-14T23:25:44.483 回答