Svn 将Subversion存储库拆分为多个Mercurial存储库?
我们正在从Subversion迁移到Mercurial,并且在SVN->Hg转换过程中遇到了问题。现在,我们的单一SVN回购协议包含两个不同“项目”的代码,我们希望在迁移过程中将它们分开。我们的SVN回购协议组织如下: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回购协议
.
|-- proj1
| |-- branches
| |-- tags
| `-- trunk
`-- proj2
|-- branches
|-- tags
`-- trunk
我们只想让proj1
和proj2
成为他们自己的Hg回购协议。当然,我们也不希望在proj2
的日志中出现特定于proj1
的历史记录。现在,当hgconvert
进行转换时,它只是非常安静地读取所有文件,甚至不区分分支和主干
在
hgconvert
中,按目录过滤和识别SVN分支的过程是什么?如您所建议的,使用“convert”扩展可以轻松完成此操作。程序如下:
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转换。这是一个本地->本地转换,所以时间方面还不错。