使用 Mercurial 将一个远程分支合并到本地分支

使用 Mercurial 将一个远程分支合并到本地分支

我想在 Mercurial 存储库中将一些配置文件作为 XML 文件进行管理。

我正在考虑的设置:每个用户都有一个 repo,其中包含一个分支,他可以在其中管理自己的个人资料,以及多个分支,他可以从另一个用户的分支中提取和合并其他个人资料。

例如,我有自己的配置文件分支和标记为朋友的分支,我想在其中提取一些远程存储库的配置文件分支,以收集配置文件集合。

我发现由于存储库不相关,我需要使用 -f,但我不知道如何将一个分支拉取并合并到另一个分支中。

所以我想要

me           friend       someone

profile ---> friends <--- profile
         \-> family

friends <--- profile

这有可能吗?我应该使用单独的存储库吗?还有更好的解决方案吗?

答案1

我认为这里的技巧是使用命名分支。

为每个用户创建一个单独的命名分支。当他们在自己的存储库和其他人存储库之间进行推送/拉取时,他们会获得其他人提交的所有变更集,但他们只会更新自己分支的变更集并提交到自己的分支中。

如果用户想要合并来自另一个用户的更改,那么他们就会将该变更集合并到他们自己的分支中,并撤消他们实际上不需要的任何变更集。

例如:

    --> B1 ---> B2 ---> B3
   /                \
A1 ---> A2 ---> A3 ---> A4 ---> A5 ---> A6
   \                        X
    --> C1 ---> C2 ---> C3 ---> C4

分支 A 的用户希望将更改 B 添加到修订 B1 和 B2 中,因此将 B2 合并到 A3 中,并将其提交为 A4。但是用户 B 不想要 A 的更改,因此不会合并 A3 或 A4,而只是创建一个新的 B3。

用户 C 想要 A4 中的所有更改,因此将其合并到 C3 中以创建 C4。

然而,用户 A 想要 C 所做的除 C1 之外的所有更改,因此 A 将 C3 合并到 A4 中,创建 A5,然后使用撤消功能撤消 C1 中的更改,创建 A6。从那时起,每当 C 分支合并到 A 分支时,它都会丢失 C1 中的更改。

不过用户 C 现在必须小心了。如果 A6 或其后代之一被合并回 C4,那么 C1 的撤销也会被合并。

希望这可以帮助,

编辑:有关 Mercurial 分支和合并的更多信息,你可以看看 Steve Losh 的博客条目

在列出的这些选项中,克隆技术是最容易上手的,但只要一次不恰当的拉动,您就无法分辨分支的哪个部分是哪个部分,一切都变得混乱。一旦您掌握了命名分支的窍门,它就会变得容易得多。

相关内容