根据我的经验,转换具有大量项目和多年历史的真实 Subversion 存储库会涉及更多内容。主要是因为在 Subversion 中,为所有东西拥有一个巨大的 repo 是很好的。相反,建议 Mercurial 存储库更细粒度。
我假设以下 Subversion 存储库布局:
├── project1
│ ├── branches
│ ├── tags
│ └── trunk
│ ├── package1
│ └── package2
└── project2
转换应将package1 和package2 转换为具有自己历史记录的独立Mercurial 存储库。在这个答案中我对单路径感兴趣,但标签和分支的转换也是possible。
准备
我通常在具有快速连接的远程服务器上进行转换。对于 Debian 系列,需要以下软件包。
apt-get install mercurial subversion python-subversion
然后应该启用转换扩展。
echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc
在 Windows 上,确保您已完成 the prerequisites。
执行
请注意,如果您尝试直接从远程 subversion 存储库进行转换,可能需要数小时,因此以下创建项目路径的镜像。那么每次转换都是几秒钟到几分钟的事情。
cd /tmp
svnadmin create svn-mirror
# on Windows you may need to look at comments to accepted answer
echo '#!/bin/sh' > svn-mirror/hooks/pre-revprop-change
chmod +x svn-mirror/hooks/pre-revprop-change
svnsync init file:///tmp/svn-mirror svn://subversion.repo/project1
svnsync sync file:///tmp/svn-mirror
echo 'include project1/trunk/package1' > package1-map
echo 'rename project1/trunk/package1 .' >> package1-map
hg convert --filemap=package1-map svn-mirror package1
echo 'include project1/trunk/package2' > package2-map
echo 'rename project1/trunk/package2 .' >> package2-map
hg convert --filemap=package2-map svn-mirror package2
然后在包目录中,您可以运行 hg serve -p 8080 并使用诸如 RhodeCode 之类的 mercurial 客户端或 repo 管理器从 http://your.host:8080 克隆。