代码之家  ›  专栏  ›  技术社区  ›  erjiang

将Subversion存储库拆分为多个Mercurial存储库?

  •  17
  • erjiang  · 技术社区  · 14 年前

    我们正在从Subversion迁移到Mercurial,在SVN->Hg转换过程中遇到了一个问题。现在,我们的单个SVN repo为几个不同的“项目”保存代码,我们希望在迁移过程中将它们分开。我们的SVN回购协议组织如下:

    .
    |-- proj1
    |   |-- branches
    |   |-- tags
    |   `-- trunk
    `-- proj2
        |-- branches
        |-- tags
        `-- trunk
    

    我们只想 proj1 proj2 他们自己的汞回购协议。当然,我们不想有特定的历史 项目1 出现在 项目2 的日志。现在,当 hg convert 进行转换时,它只是非常愚蠢地读取所有文件,甚至无法区分分支和主干。

    按目录筛选和识别SVN分支的过程是什么 汞转换 ?

    3 回复  |  直到 14 年前
        1
  •  8
  •   erjiang    14 年前

    我现在可以工作了,多亏了 ConvertExtension wiki page !

    我尝试了Ry4an的方法,但它带来的缺点是,在拆分所有内容之前,必须先将SVN repo转换为中间Mercurial repo,而分支、主干和标记无法被识别,因为有两个项目各自有自己的分支、主干和标记。

    我发现手动指定branchs、trunk和tags目录对于一次将一个项目从SVN转换为Mercurial非常有用:

    hg \
    --config convert.svn.trunk=proj1/trunk \
    --config convert.svn.branches=proj1/branches \
    --config convert.svn.tags=proj1/tags \
    convert --authors authors.txt original-svn-dir hg-proj1
    

    这将负责识别SVN分支、标记和主干 仅用于筛选 proj1 同时修订。然后,我重复了一遍 proj2 .

        2
  •  2
  •   8DH    14 年前

    另一种解决方法是使用svnadmin dump和svndumpfilter将svn repo拆分为每个项目一个新的svn存储库,如svn文档中所述。 Splitting repositories by filtering repository history

        3
  •  0
  •   Ry4an Brase    14 年前

    正如您所建议的那样,使用“convert”扩展很容易做到这一点。程序如下:

    1. 做一个 hg convert SVNREPO all-in-one-mercurial-repo 从svn到mercurial
    2. 做多次 hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo 命令--每个项目一个

    这些文件映射包含以下行:

    exclude proj1
    rename proj2 .
    

    这就是从一体化mercurial repo中提取project2的repo时使用的文件映射。您可能需要列出这些地图中的每个单独文件,但我认为目录是可以的。

    这里还有一个问题,我在哪里回答了几乎相同的问题,并粘贴在一个完整的例子中,但这应该足够让你去。