将SVN存储库结构转换为Mercurial的推荐方法

时间:2011-11-04 11:28:32

标签: svn mercurial

我目前正在研究如何最好地从SVN转移到Mercurial。

我对推荐的Mercurial存储库结构进行了一些研究 - 请参阅Subversion Re-educationRecommended Mercurial repository/folder structure for an SVN user(Yet another) What's the best conversion from an SVN repository to HG repository(ies)?

我认为我现在已经有了这个结构,但我想就如何最好地接近实际转换提出一些建议。

仅供参考,这是我们目前的SVN结构:

Project-repository
    Trunk
        ProductA
            Trunk
            Branches
            Tags
        ProductB
            Trunk
            Branches
            Tags
    Branches
        ClientA
            ProductA
                Trunk
                Branches
                Tags
            ProductB
                Trunk
                Branches
                Tags
        ClientB
            ProductA
                Trunk
                Branches
                Tags
            ProductB
                Trunk
                Branches
                Tags
    Tags

这是建议的Hg结构:

Stable-ProductA-repository

Stable-ProductB-repository

ClientA-ProductA-repository (branched from Stable-ProductA-repository)

ClientA-ProductB-repository (branched from Stable-ProductB-repository)

现在将我们当前的SVN结构转换为Hg,我正在考虑使用Convert extension

以下列方式
  1. 将“Project-repository / Trunk / ProductA”转换为Stable-ProductA-repository
  2. 将“Project-repository / Trunk / ProductB”转换为Stable-ProductB-repository
  3. 将“Project-repository / Branches / ClientA / ProductA”转换为ClientA-ProductA-repository
  4. 将“Project-repository / Branches / ClientA / ProductB”转换为ClientA-ProductB-repository
  5. 等。对于ClientB
  6. 从我读过的内容来看,这似乎是构建Mercurial存储库并从SVN转换为Mercurial的正确方法,但我有点不确定我是否遗漏了一些东西。具体而言,我不确定是否对例如可以从Stable-ProductA-repository中提取ClientA-ProductA-repository。我们大部分时间都在客户端存储库中进行开发,因此我们需要能够将更改合并到稳定的存储库中。

    我知道Mercurial支持子存储库,但我想远离嵌套的存储库结构并且可以说是干净利落。

    所以只是要清楚我要问的问题:在从一个SVN存储库转换到多个Hg存储库之后,是否可以在存储库之间进行拉/推,这是我对新Hg结构声音的建议?

1 个答案:

答案 0 :(得分:2)

  

具体来说,我不确定是否对例如可以从Stable-ProductA-repository中提取ClientA-ProductA-repository。我们大部分时间都在客户端存储库中进行开发,因此我们需要能够将更改合并到稳定的存储库中。

最初,不,我不相信你能从他们身上拉出来。但是,进行初始手动合并并不会太难。事实上,我相信它会像跑步一样简单:

clientA$ hg checkout $CLIENTA_HEAD
clientA$ hg pull ../stable
clientA$ HGMERGE=true hg merge $STABLE_HEAD
clientA$ hg revert --all -r $CLIENTA_HEAD
clientA$ hg ci -m "Merge stable into clientA, throwing away changes from stable"

现在,从这一点开始(好吧,在将这些更改推送到稳定的,可能更多的小提琴之后),这两个存储库将共享一个共同的祖先,因此您将能够在它们之间进行合并。

  

我知道Mercurial支持子存储库,但我想远离嵌套的存储库结构并且可以说是干净利落。

一般来说,这是一个好主意,只要小心,如果你有一个所有依赖的实用程序库 - 将它保存在subrepo中以确保对于任何版本的“main”都不那么痛苦repo,你可以找到它构建的实用程序repo的版本。

  

所以只是要清楚我要问的问题:在从一个SVN存储库转换到多个Hg存储库之后,是否可以在存储库之间进行拉/推,这是我对新Hg结构声音的建议?

对我来说很合理。

我唯一要改变的是我使用ProductA-ClientA代替ClientA-ProductA,因为我更愿意看到按产品而非客户分组的回购...但有可能很好的理由以你的方式去做。