我们正在从Subversion迁移到Mercurial,并且在SVN-> Hg转换过程中遇到了麻烦。现在,我们的单个SVN仓库为几个不同的“项目”保留代码,我们希望在迁移过程中将它们分开。我们的SVN回购组织为:
.
|-- proj1
| |-- branches
| |-- tags
| `-- trunk
`-- proj2
|-- branches
|-- tags
`-- trunk
我们想简单地让proj1
和proj2
成为他们自己的Hg回购。当然,我们还希望proj1
的{{1}}日志中没有特定的历史记录。现在,当proj2
执行转换时,它只是非常愚蠢地读取所有文件,甚至不区分分支与中继。
按目录过滤和识别hg convert
中的SVN分支的过程是什么?
答案 0 :(得分:8)
我尝试了Ry4an的方法,但它带来的缺点是必须首先将SVN repo转换为中间Mercurial仓库,然后才能拆分所有内容,而且分支,主干和标签都没有被识别,因为每个都有两个项目有自己的分支,主干和标签。
我发现手动指定branches,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
这将同时识别仅proj1
修订版的SVN分支,标记和主干和过滤器。然后,我只是为proj2
重复了一遍。
答案 1 :(得分:2)
另一种解决方法是使用svnadmin dump和svndumpfilter将svn repo拆分为每个项目的一个新的svn存储库,如svn文档中所述。 Splitting repositories by filtering repository history
答案 2 :(得分:0)
如您所建议的那样,使用'convert'扩展程序可以轻松完成此操作。这是程序:
hg convert SVNREPO all-in-one-mercurial-repo
与所有事情一起做好事hg convert --filemap projectfilemap.txt all-in-one-mercurial-repo project-repo
命令 - 每个项目一个这些文件地图中包含以下行:
exclude proj1
rename proj2 .
这就是从一体化mercurial repo中提取项目二的repo时使用的文件映射。您可能需要在这些地图中列出每个单独的文件,但我认为目录没问题。
这里还有另外一个问题,在那里我回答了几乎相同的事情并粘贴在一个完整的例子中,但这应该足以让你前进。