如何将单个Subversion项目转换为Mercurial存储库?

时间:2013-06-04 04:13:31

标签: svn mercurial

我有一个旧的 Subversion存储库,里面有很多项目。每个项目都遵循SVN的规范 trunk-branches-tags 约定。

我可以使用以下命令将整个SVN存储库转换为Mercurial:

$ hg convert /some-path/old-svn-rep
# This creates old-svn-rep-hg

$ cd old-svn-rep-hg
$ hg update
# Can see all the projects as separate directories

如果您了解SVN,您知道/some-path/old-svn-rep内的目录组织是:

$ ls /some-path/old-svn-rep
conf/
db/
hooks/
locks/
format
README.txt

如何将此SVN存储库中的单个项目转换为名为 Foo 的Mercurial存储库?

这显然不起作用:

$ hg convert /some-path/old-svn-rep/Foo
assuming destination Foo-hg
initializing destination Foo-hg repository
/some-path/old-svn-rep/Foo does not look like a Subversion repository

请假设SVN项目的主干,许多分支和标签都有变化。

3 个答案:

答案 0 :(得分:1)

hg convert可以使用任何用于签出SVN存储库中项目的URL。

在我的测试中,svn checkout /some-path/old-svn-repo/Foo也不起作用。如果要从本地文件系统克隆某些内容,则需要做的是在file://前加上前缀 - 即svn checkout file:///some-path/old-svn-repo/Foo

hg convert的情况相同,请尝试hg convert file:///some-path/old-svn-repo/Foo

答案 1 :(得分:0)

来自项目根目录的HGSubversion扩展和克隆SVN-repo(hg clone

答案 2 :(得分:0)

我能够通过以下步骤完成此操作:

svnadmin create Foo

我需要更改此命令,因为我无法访问svn服务器,因此版本在克隆期间不匹配:

svnadmin create --compatible-version 1.6 Foo

按照步骤1-5:howto use svnsync to mirror a repository on windows

svnsync init file:///projects/Foo /some-path/old-svn-rep/Foo
svnsync sync file:///projects/Foo

按照此处的步骤2创建usermapping.txt:Goodbye Subversion, Hello Mercurial: A Migration Guide

安装hgsubversion:hgsubversion

hg clone --config extensions.hgsubversion=/path-to-hgsubversion / 
--config hgsubversion.authormap=usermapping.txt / 
file:///projects/Foo hg-Foo