将Subversion存储库转换为Mercurial

时间:2009-11-01 16:53:50

标签: svn mercurial migration hgrc

我正在尝试将SVN存储库转换为Mercurial,但我遇到了一些麻烦。这些是我采取的步骤:(我在Windows上)

在扩展程序

中启用“转换”

打开命令窗口,然后输入:

hg convert http://myversioncontrorepositoryhere

它说它正在初始化目标文件夹,然后询问:

Enter username for Administration at http://myversioncontrorepositoryhere:

输入我的用户名然后

 in Administration at http://myversioncontrorepositoryhere:

我认为这是我的密码,但它只是循环回到

Enter username for Administration at http://myversioncontrorepositoryhere:

我做错了什么?我非常确定我正在输入我的用户名和密码。

4 个答案:

答案 0 :(得分:7)

我不知道可能出现什么问题,但我想建议一个解决方法(这是我个人用于此任务的唯一方法!):首先svnsync svn项目到制作一个本地镜像,然后hg convert那个本地镜像 - 这就是O'Sullivan在his book中建议的(这个URL有,作为“书中的样本”,正好是从其他项目导入项目的相关附录) VCS到hg - 特别强调svn!),虽然他的建议主要受到速度考虑的启发,但我怀疑跟随它还节省了我的身份验证和授权麻烦,我希望它能为你做同样的事情! - )

答案 1 :(得分:3)

请尝试hgsubversion;它更加强大。我在Windows上与Subversion的CLI交互时遇到了很多奇怪的问题(主要通过使用CMD而不是另一个shell来解决)。

答案 2 :(得分:1)

我很幸运,只需从本地结帐转换即可修复身份验证问题:

svn co http://myversioncontrorepositoryhere localrepo
hg convert localrepo

答案 3 :(得分:0)

根据我的经验,转换一个真实的单词Subversion存储库与一堆项目和多年的历史更多地涉及。主要是因为在Subversion中,所有东西都有一个巨大的回购,这很好。相反,Mercurial存储库被建议更精细。

我假设以下Subversion存储库布局:

├── project1
│   ├── branches
│   ├── tags
│   └── trunk
│       ├── package1
│       └── package2
└── project2

转化应将package1package2转换为具有自己历史记录的单独Mercurial存储库。在这个答案中,我对单一路径感兴趣,但标签和分支的转换也是possible

制备

我通常在快速连接的远程服务器上进行转换。对于Debian-family,需要以下软件包。

apt-get install mercurial subversion python-subversion

然后应启用转换扩展名。

echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc

在Windows上确保您已完成the prerequisites

执行

请注意,如果您尝试直接从远程subversion repo进行转换,则可能需要数小时,因此以下内容会创建项目路径的镜像。然后每次转换只需几秒到几分钟。

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并使用mercurial客户端或repo管理器(如RhodeCode)从http://your.host:8080克隆。