Version control Mercurial中的父/子项目关系

Version control Mercurial中的父/子项目关系,version-control,mercurial,Version Control,Mercurial,我对mercurial(一般来说是SCM)是新手,我一直在处理两个项目之间的父子关系。一个项目是父项目,是另一个项目的子集(或者更确切地说,另一个项目是第一个项目的超集)。我希望在一个本地存储库中处理这两个项目,就像它们是一个项目一样,但我希望将它们发布到两个不同的公共存储库中 我看过子存储库,但这不是我想要的,因为我需要我的存储库在同一根目录下工作。我的猜测是使用分支,但是合并超级项目中的更改不需要添加新文件吗 做这件事最简单/正确的方法是什么?我想如果你四处寻找“供应商分支”的答案,你会发现

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

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


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

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

基本的jist是确保您想要保留的任何更改都是子集合存储库中只有来自该子集合的更改集作为祖先。这是一幅粗略的画面:

subset:

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

superset1:

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


superset2:

[A]---[B]----[C]----[D]---[G]---[H]
有了这样的存储库,您在子集中所做的任何更改都可以轻松地
hg拉入到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]--

将更改从超集1移动到超集2或从任一超集移动到子集要干净得多,因此在子集中进行更改并将其拉入/合并到超集中,就可以开始了。

发布超集时,是否要包括子集?是,相反,对于记录来说,这根本不使用“命名分支”。只是“默认”分支上的正常变更集父级,这是一个很好的方法。这几乎证实了我认为必要的东西,但我也认为将变更推到super并不是一个简单/干净的过程,这正是我希望得到的。但这似乎是唯一的办法,我将保留两个回购协议,并将更改从Super->Sub移动。我接受答案,tnx。你可以从Super移动到Sub,你只需使用export+import(又名移植),这意味着相同的更改将存在于两个不同的hashid中,当你从Sub拉回到Super时,你将在Super中得到两次。它会很好用的,只是看起来有点奇怪。最好在方便的时候去超级潜艇。