Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 将Subversion存储库拆分为多个Mercurial存储库?_Svn_Mercurial_Mercurial Convert - Fatal编程技术网

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

Svn 将Subversion存储库拆分为多个Mercurial存储库?,svn,mercurial,mercurial-convert,Svn,Mercurial,Mercurial Convert,我们正在从Subversion迁移到Mercurial,并且在SVN->Hg转换过程中遇到了问题。现在,我们的单一SVN回购协议包含两个不同“项目”的代码,我们希望在迁移过程中将它们分开。我们的SVN回购协议组织如下: . |-- proj1 | |-- branches | |-- tags | `-- trunk `-- proj2 |-- branches |-- tags `-- trunk 我们只想让proj1和proj2成为他们自己的Hg回购协议

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

.
|-- proj1
|   |-- branches
|   |-- tags
|   `-- trunk
`-- proj2
    |-- branches
    |-- tags
    `-- trunk
我们只想让
proj1
proj2
成为他们自己的Hg回购协议。当然,我们也不希望在
proj2
的日志中出现特定于
proj1
的历史记录。现在,当
hgconvert
进行转换时,它只是非常安静地读取所有文件,甚至不区分分支和主干


hgconvert
中,按目录过滤和识别SVN分支的过程是什么?

如您所建议的,使用“convert”扩展可以轻松完成此操作。程序如下:

  • 将SVNREPO全合一mercurial回购从svn转换为mercurial
  • 执行多个
    hg convert--filemap projectfilemap.txt多功能mercurial repo项目repo
    命令--每个项目一个
  • 这些文件映射中包含以下行:

    exclude proj1
    rename proj2 .
    
    这将是从多功能mercurial回购协议中提取Project2回购协议时使用的文件映射。您可能需要列出这些地图中的每个文件,但我认为目录是可以的


    这里还有一个问题,我回答了几乎相同的问题,并粘贴了一个完整的示例,但这应该足以让您继续。

    多亏了

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

    我发现手动指定分支、主干和标记目录对于一次将一个项目从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

    重复了它,另一种解决方法是使用svnadmin dump和svndumpfilter将svn repo拆分为每个项目的一个新svn存储库,如svn文档中所述。

    +1这是一个非常重要的问题,在许多公司都很相关。@erjiang:如果您很高兴使用svn在一次回购中使用两个项目,为什么不使用相同的(不正确的)模式和mercurial?;-))我将使用“使用SVN整理混乱,然后导入Hg”aka“如何将SVN回购拆分为两个项目,并在每个项目中保留适当的数据”。。。你想把两个项目绑在一个旗帜下。至少,从我的立场来看是这样的。在svn中,“一体机”的设置非常好,因为它能够只签出树的一部分。Mercurial(和其他DVCSs)就是不提供这一点,这就是为什么convert和filemap可以很容易地拆分回购协议。这里有一个类似的问题:也许可以发布上一个问题的链接?哦,另外,hg convert可以像git svn一样理解分支吗?是的,如果你使用了普通的分支/,标记/,树干/树形结构它能很好地把它们捡起来。很高兴你把它修好了。多个svn->hg对话的缺点是svn->hg片段比hg->hg片段花费的时间要长得多,因此考虑到获取authormaps、splits等的迭代性质,正确地执行svn->hg一次,并且为每个项目执行(和重做)hg->hg通常可以节省时间。此外,如果您打算使用convert对增量转换的支持(即:在一个月内再次使用新的svn工具,不改变hg哈希ID),您需要一个svn转换。这是一个本地->本地转换,所以时间方面还不错。