我有一个旧的 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项目的主干,许多分支和标签都有变化。
答案 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