I\'m looking for a tool to migrate a couple of SVN repositories to Mercurial, with history, labels and so on.
I\'m using TortoiseHg (Windows x32), so ConvertExtensio
I just had to tackle this problem myself. I have a windows XP machine with a separate windows server hosting VisualSVN Server.
I also have TortoiseHG installed as well as the CollabNet Subversion Command-Line Client.
<Enable Convert Extension w/ Tortoise Hg 2>
Many thanks to bgever for pointing out in the comments that with TortoiseHg 2.0, enabling the convert extension is easier than ever. As he says
With TortoiseHG 2.0 this has been made much simpler: Start the TortoiseHG Workbench from the Start menu. Select File --> Settings. Select Extensions from the list. Check the 'convert' checkbox and click OK. That's it! No need to try to generate the config file anymore and search it in the file system. – bgever Mar 11 at 7:56
</Enable Convert Extension w/ Tortoise Hg 2>
<Enable Convert Extension Manually>
To convert a repository from SVN to HG, I followed these steps:
1) Open C:\Program Files\TortoiseHg\Mercurial.ini
EDIT
FYI - Tortoise Hg has migrated this file to
That file will be mostly empty and you'll just list what you'd like to override there. If that's what you have, simple add these two lines to the very end of the file:
[extensions]
convert =
2) Search for the line that begins with
[extensions]
3) Below it you'll see a list of keywords, commented out with a semicolon (;) on each line
4) Find the line that says
;convert =
and delete the semicolon so it reads
convert =
</Enable Convert Extension Manually>
5) Open the command prompt and navigate to the directory that you'd like the new hg folder created in (the process will create a new folder called yoursvnreponame-hg in the directory that the command prompt is open to).
6) Use this command
hg convert file:///y:/yoursvnreponame
I found that the convert tool can have problems with networked repositories, so I had to map a drive to it, but this worked just fine for me.
To convert an SVN Repo to an HG Repo AND copy it to a different server, you will need a few things.
convert
extension to Tortoise. Start the TortoiseHG Workbench from the Start menu. Select File -> Settings
. Select Extensions
from the list. Check the convert
checkbox and click OK.First the conversion…
\\server\folder
Do not map the SVN Repo folder itself. Map the folder just above it) Give the mapped drive a letter, like Y:\
CD /D Y:\
Y:\
prompt type: hg convert y:/RepoName
(use the name of the current Repo) Be careful of the forward and back slashes. The one in the command is a forward slash. Also, if the name has spaces, put the name in quotations. (i.e. Y:/"My Repo folder"
)Second the cloning…
File -> Clone Repository
I just converted a remote SVN repo with HTTP auth to a Mercurial repo, and let me tell you, there's not a lot of documentation on how to do this. I had to download the Mercurial source and install it stand-alone, using the source package, that way the SVN bindings will work the right way.
I installed it like:
python setup.py install
Which worked just fine on my Server 2003 box. I can now convert an SVN repo the correct way, by doing something like this:
python c:\python26\scripts\hg convert <remote repo>
The documentation for ConvertExtension on the Mercurial site isn't terribly clear, but it does say this:
There's no way to install the Subversion bindings into [Mercurial's] built-in Python library. So you'll need to use a Mercurial installed on top of a stand-alone Python
So now I just use the stand-alone version for converting, and TortoiseHg for actual VCS work.
Using the convert extension of Mercurial:
convert=
to the [extensions]
section of .hgrc like this:
[extensions]
convert=
sudo apt-get install python-subversion
hg convert
command
hg convert -h
for helphg convert http://[svnserver]/[Project] --source-type svn [DestinationDir]
(see note 2)hg push https://[mercurialserver]/[Project]
note: you can even repeat the hg convert command to include new changes made in the svn repository after the previous convert.
note 2: When hg convert doesn't work using http://
or svn://
you could first checkout the Subversion repository (or update an existing one) and convert using the local checkout; example: hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]
Nobody still does not mention hgsubversion (Extension Wiki), which can do it without almost any headache (excluding rare cases and specific tree).
Just add extension, enable it and hg clone SVN_REPO
to local mercurial repo