Your first option should probably be the ConvertExtension recently bundled with mercurial. It supports branches, incremental imports, and a few other nice features, and is maintained by the Mercurial authors. It currently only understands CVS, subversion, Darcs and git. Otherwise, the following tools may be useful.

Arch / TLA / Baz 1.5

Tools for Arch conversion can be found at ArchConversion.



Multiple convertors exist for converting from CVS to Mercurial:

You can also convert from Mercurial to CVS:


The ConvertExtension supports Darcs.

An older sample Darcs conversion script is available in the contrib/ directory of the Mercurial source.

Also see ["Tailor"].


See GitConversion (incremental).


The ConvertExtension included in Mercurial 0.9.5 can import Subversion trees. It uses the Subversion API, so it can speak any Subversion repository access protocol.

Converters that work on local repositories or data (faster, if this is an option for you):

Converters that work on remote repositories:

Syncing tools:


[ p4_to_hg]

This utility can actually keep two repositories in sync.

Currently, it's slapped together and built to serve my particular needs, but it could probably be modified into something more general. It currently makes no attempt to do anything with Perforce's ability to track branches or the movement of changesets from branch to branch. -- EricHopper 2005-09-27 06:31:03



Because of the threatening behavior of Larry McVoldemort of Bitmover, no Bitkeeper conversion tools have been made publically available. See GenericConversion for details on building your own repository conversion tool.

Other systems

["Tailor"] is a conversion tool that can do simple conversions from a variety of systems. See GenericConversion for details on building your own repository conversion tool.