确实需要两个杰出分支机构的两位负责人

Really needed two heads in two distinguished branches

我们在存储共享存储库的 TortoiseHg 和 Bitbucket 上遇到了这种情况:

dev1和dev2的工作合并由dev1完成;但是 dev1 看不到 dev2 的工作,因为最新的不能将他的工作推送到 bitbucket 存储库中,因为他被 HG 阻止了,原因是 "abort: push creates new remote head 2221daef6518 on branch 'Federico Development'"

我担心问题是由 dev2 的一次提交引起的,图中用两个红色圆圈标记的提交:他在本地的 federico 分支上提交,而 federico 也在同一个分支上工作和提交。

无论问题的最初原因是什么,我们都想让 dev2 将他作为 dev1 的不同分支负责人的工作推送到共享存储库,以便 dev1 可以拉取 dev2 作业并将两者合并头。是否有可能获得此结果的任何解决方法?

其次,我们想了解问题的根源,以便更好地理解并在将来预防:

  1. 问题是由 dev2 ono dev1 分支的提交引起的吗?
  2. 为什么 HG 仍然停止,即使在那个不幸的提交 dev2 已经用第二次提交更改了分支?
  3. 有没有办法为每个用户分配一个特定的分支,或者换句话说,拒绝某些用户对特定分支的提交访问?

默认情况下,Mercurial 不允许将一个分支上的多个头推送到服务器。在你的例子中,dev2 在 dev1 分支上创建了一个新的提交并创建了一个新的头。

现在一一回答您的问题:

  1. 是的,问题的起源是因为 dev2 在 dev1 分支上创建了一个新的提交,导致 dev1 分支有多个头。

  2. mercurial 中的提交是提交信息的一部分。因此,即使 dev2 在新分支上创建了新提交,dev2 所做的第一次提交仍然在 dev1 分支上。

  3. 是的,您可以编写预提交挂钩来实现。

以下是您暂时可以解决此问题的方法:

dev2 可以使用 --force 标志使用额外的头进行推送。这会将新头推送到服务器。这样提交将被交换,但你最终会在 dev1 分支上有多个头,你需要通过合并或其他方式解决。