17

我们正在从 Subversion 迁移到 Mercurial,并且在 SVN->Hg 转换过程中遇到了问题。现在,我们的单个 SVN 存储库包含几个不同“项目”的代码,我们希望在迁移过程中将它们分开。我们的 SVN 存储库组织为:

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

我们想简单地制作proj1proj2他们自己的 Hg repos。当然,我们也希望没有特定的历史记录proj1出现在proj2's 的日志中。现在,什么时候hg convert转换,它只是非常愚蠢地读取所有文件,甚至没有区分分支和主干。

按目录过滤和识别SVN分支的过程是hg convert什么?

4

3 回答 3

8

感谢ConvertExtension wiki 页面,我现在可以正常工作了!

我尝试了 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

于 2010-11-18T04:25:08.110 回答
2

另一种解决方法是使用 svnadmin dump 和 svndumpfilter 将 svn 存储库拆分为每个项目一个新的 svn 存储库,如 svn 文档中所述。 通过过滤存储库历史来拆分存储库

于 2010-11-18T11:52:31.773 回答
0

正如您所建议的,这很容易使用“转换”扩展名来完成。这是程序:

  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 存储库中仅提取项目二的存储库时使用的文件映射。您可能需要在这些地图中列出每个单独的文件,但我认为目录是可以的。

SO上有另一个问题,我回答了几乎相同的问题并粘贴了一个完整的例子,但这应该足以让你继续前进。

于 2010-11-18T02:30:28.413 回答