管理具有多个头的存储库的缺点是什么?

What is the downside to managing a repository with multiple heads?

我有一个默认只有一个分支的项目。我已经在这个单一的命名分支上迭代了一段时间,并且我一直在使用标签来标记版本号里程碑。

项目的源代码在标签 1.0.7 和 1.1.0(当前)之间发生了很大变化。但是,1.0.7 上的一些用户需要修复错误。所以我检查了源代码,更新到标签 1.0.7,实施修复并提交。那被标记为 1.0.8,并且可能是 1.0.x 行的最后一次提交。

我现在在默认分支上有两个负责人。我期望。但是当我尝试推送到我们的 BitBucket 帐户时,我收到了来自 hg 的警告:"push creates new remote head"。阅读这条消息后,我得到了很多解释为什么会出现这条消息的答案,对于大多数人来说,答案就是合并。但是,我不认为在这种情况下我想要那样。这两个分支不兼容。

看起来我可以只使用 -f 选项强制将新头推送到远程存储库,但是 hg help 和网络上的各种帖子似乎都不鼓励这样做,而没有太多解释原因。那么这样做的缺点是什么?似乎我仍然可以更新到我想继续工作的任何 tags/revisions。如果我将那个头推到 BitBucket 帐户,我会不会以某种方式搬起石头砸自己的脚?

有多个头是完全没问题的。

如果有多个 head 并且几乎没有说明它们的用途,其他人可能很难看出它们应该从哪里继续以及哪个 head 包含最新的发展,例如获得新功能。

但是像你一样在分支上使用标签,版本控制清晰,这个问题也不存在。

不过有一个小问题:Mercurial 将在克隆后更新到默认分支中的最新提交 - 例如收到最后一次提交的负责人。如果那是你的 1.0.x 头,那可能很不幸。但是,您可以通过将特殊的“@”书签附加到主线或开发负责人来解决此问题。 Mercurial 将始终更新到带有该书签的头部,如果它存在 - 无论哪个头部有最新的提交。