I’ve created a Mercurial mirror of an SVN repository (using this tutorial: http://oreilly.com/opensource/excerpts/opensource-mercurial/migrating-to-mercurial.html). The sync works great, except I’ve noticed it’s not picking up an external repository that is referenced in the main SVN repo…
I’d ideally like to be able to pull everything as a single repo into Mercurial (along with changesets if possible).
What I’m not sure of is: is the missing external a limitation of svnsync, or a limitation of hg convert?
Is there any way I can force the external to be synced as well, into the same Mercurial repo?
I’m thinking a good solution would be to set up the sync process all over again, for the external.
Create a fork of the current hg mirror, and sync the external into the hg mirror fork.
The catch with that is, the external’s trunk is intended to go into a subfolder of the first mirror, so how can I replicate that with convert? I doubt I could tell convert to import into a subfolder…
svnsyncis used to create a mirror of a SVN repository. This includes anysvn:externalsproperties. Therefore it must be a limitation ofhg convert.Note that you don’t really need to create a mirror with
svnsync. The article recommends this only because having a local copy might speed up the conversion process.It is common for a SVN repository to contain multiple loosely related projects, each with their own branches and tags. But Mercurial doesn’t work that way: when you branch, you branch everything that is in the repository. You should create a separate mercurial repository for each project in SVN that has its own trunk/branches/tags. This different approach is most likely why
hg convertignores externals, even if they are in the same SVN repository.There is an equivalent of
svn:externalsin mercurial; it’s called “subrepositories”. Instead of having one or moresvn:externalsproperties, you have a single.hgsubfile with similar content in the root of your project. You should first convert each SVN project to a seperate mercurial repository, and then connect them with subrepositories. See the mercurial wiki page for subrepositories for more details.