根据我的经验,转换具有大量项目和多年历史的真实 Subversion 存储库需要更多的参与。主要是因为在 Subversion 中,为所有东西拥有一个巨大的 repo 是很好的。相反,建议 Mercurial 存储库更细粒度。
我假设以下 Subversion 存储库布局:
├── project1
│ ├── branches
│ ├── tags
│ └── trunk
│ ├── package1
│ └── package2
└── project2
转换应该变成具有自己历史的独立 Mercurial 存储库package1
。package2
在这个答案中,我对单路径感兴趣,但标签和分支的转换也是可能的。
准备
我通常在具有快速连接的远程服务器上进行转换。对于 Debian 系列,需要以下软件包。
apt-get install mercurial subversion python-subversion
然后应该启用转换扩展。
echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc
在 Windows 上,确保您已满足先决条件。
执行
请注意,如果您尝试直接从远程颠覆存储库进行转换,可能需要几个小时,因此以下创建项目路径的镜像。然后每次转换都是几秒钟到几分钟的事情。
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
然后在包目录中,您可以使用 mercurial 客户端或像 RhodeCode 这样的 repo 管理器运行hg serve -p 8080
和克隆。http://your.host:8080