Mercurial 中的并行 branches/clones?

Paralell branches/clones in Mercurial?

这个问题不仅是技术问题。我也想深入了解这个概念。

BitBucket上有一个国外项目(例如ObjectListView)。我需要同时处理两个问题。在 git 中,我将在克隆后在本地存储库中创建分支。

但是我将如何使用 Mercurial 执行此操作?

当我在那里创建分支时,由于缺少“--allow-new-branch”选项,我无法将本地提交推送回远程存储库。 所以它不想让我分支。

根据我目前的理解,我只会为每个新的 feauter(分支)创建一个克隆。所以这意味着当我想处理两个不同的问题时,我必须在 BitBucket 上为一个项目创建两个分支。

你会如何解决这个问题?

这里缺少一些信息,所以我不确定我知道你的问题是什么。我将尝试进行一些有根据的猜测并涵盖多种可能性。如果我未能充分解决您的问题,请随时回来询问。

首先,如果您愿意,完全可以只创建新分支。您需要使用 hg push -fhg push --new-branch(如果您使用命名分支而不是匿名分支)让远程服务器接受它们(这是为了防止您意外推送新分支)。当然,您将需要对存储库的写入权限(或分叉存储库并在该分叉上工作)。

其次,如果您只想推送当前的 revision/branch(以及功能分支的任何相关修订)而不是同步整个存储库,那么 hg push -r . 将执行此操作(此处,.表示当前版本,也可以指定其他)。如果您经常使用它,您可能需要创建一个别名,例如submit = push -r ..

第三,如果您确实需要单独的工作区,使用 hg share 可能比克隆存储库更方便。 (请注意,您首先必须为此启用共享 "extension";"extension" 一词在引号中是因为它实际上是核心 Mercurial 的一部分,而不是传统意义上的扩展。)hg share 创建一个单独的目录,该目录仍链接到同一存储库,但具有单独的文件单独签出。

了解 Git 和 Mercurial 中的分支是完全不同的东西也很重要。 Git 中的分支,除了命名特定的提交之外,存在的目的是保持修订的有效性(因此它们不会被垃圾收集)。在 Mercurial 中,没有任何东西会被垃圾回收,因此您不需要为此目的使用类似 Git 的分支;相反,Mercurial 有匿名分支(有点像 Git 中分离的 HEADs -- 有点)和命名分支(用于用 permanent 标记修订集姓名)。书签可用于在任一类型的分支(或特定修订)上放置 临时 标签。书签 + 匿名分支可以做得相当 Git-like 如果你愿意的话。

因此,如果您想要一个类似于 Git 的方法,您只需创建匿名分支(并可选择在它们上放置一个书签以便于参考,尽管将它们作为创建的两个目录中的分支头with hg share 可能是更好的选择,如果你想同时处理这两个而不必切换。然后你会使用 hg push -r . 将该特定分支推送到远程存储库(你可能还需要 -f 如果你正在创建一个新的头部)。

但是,如果这不是您的存储库,您可能需要与所有者核实他们喜欢什么结构;例如,许多 Mercurial 用户更喜欢命名分支,以便稍后能够分辨出哪些修订属于一起(有点像跨越多个修订的标签)。