Mercurial中的父/子项目关系

时间:2011-04-01 08:09:00

标签: version-control mercurial

我是mercurial(和一般的SCM)的新手,我一直在处理我的两个项目之间的父子关系。一个项目是父项目,是另一个项目的子集(或者更确切地说,另一个项目是第一个项目的超集)。我想在一个本地存储库中处理这两个项目,就像它们是一个,但我想将它们发布到两个不同的公共存储库。

我查看了子存储库,但这不是我想要的,因为我需要我的存储库才能在同一个根目录下工作。我的猜测是使用分支但不会将更改合并到超级项目中需要添加新文件?

这样做最简单/最正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

我想如果你四处寻找“供应商分支”的答案,你会发现它们也涵盖了你的案例。

基本要点是确保您要保留的任何更改是子集存储库具有来自该子集的更改集作为祖先。这是一幅粗略的图片:

subset:

[A]---[B]----[C]----[D]

superset1:

[A]---[B]----[C]----[D]---[E]---[F]


superset2:

[A]---[B]----[C]----[D]---[G]---[H]

使用这样的存储库,您在子集中所做的任何更改都可以轻松hg pull进入superset1和/或superset2。例如,如果您在子集中添加新功能,则您的目录可能如下所示:

subset:

[A]---[B]----[C]----[D]---[I]---[J]

superset1:

[A]---[B]----[C]----[D]---[E]---[F]


superset2:

[A]---[B]----[C]----[D]---[G]---[H]

并将它们拉入superset1和superset2之后你会有:

subset:

[A]---[B]----[C]----[D]---[I]---[J]

superset1:

[A]---[B]----[C]----[D]---[E]---[F]
                       \
                        --[I]---[J]

superset2:

[A]---[B]----[C]----[D]---[G]---[H]
                       \
                        --[I]---[J]

然后你只需要在superset1和superset2中hg merge获得:

subset:

[A]---[B]----[C]----[D]---[I]---[J]

superset1:

[A]---[B]----[C]----[D]---[E]---[F]---[K]
                       \             /
                        --[I]---[J]--

superset2:

[A]---[B]----[C]----[D]---[G]---[H]---[L]
                       \             /
                        --[I]---[J]--

将更改从superset1移动到superset2或从超集移动到子集更不干净,因此在子集中进行更改并将其拉/合并到超集中,您就可以了。