reposurgeon 2.0 announcement &#8211; the full-orchestra version
<p>I shipped <a href="http://www.catb.org/esr/reposurgeon/">reposurgeon 2.0</a> a few days ago with the Subversion support feature-complete, and a 2.1 minor bugfix release this morning.  My previous release announcement was somewhat rushed, so here is a more detailed one explaining why anybody contemplating moving up from Subversion should care.</p>
<p>To go with this, there is a new version of my <a href="http://www.catb.org/esr/dvcs-migration-guide.html">DVCS Migration HOWTO</a>.</p>
<p><span id="more-4691"></span></p>
<p>reposurgeon can now read and analyze Subversion stream dumps, and can translate them to git fast-import streams. This brings with it the ability to export not just to git but to any DVCS that can speak that stream format; reposurgeon currently has direct support for hg and bzr.</p>
<ul>
<li>Branchy repos are automatically handled correctly, with trunk mapped to master and Subversion branches maped to gitspace branches.</li>
<li>Subversion tags are automatically mapped to git annotated tags (or to branches with tagged ends if the tag directory was modified after the copy).</li>
<li>Multibranch commits are automatically split into annotated per-branch commits.</li>
<li>Various kinds of meaningless cruft and artifacts generated by older versions of cvs2svn are automatically cleaned up. (But no potentially interesting comments or metadata are ever thrown away.)</li>
<li>Ersatz branch copies consisting of a plain directory copy followed by multiple adds are detected and treated like intentional branch creations.</li>
<li>svn:ignore property settings and clears are automatically translated to equivalent creations and removals of .gitignore files.</li>
<li>There is semi-automated support for lifting CVS and Subversion commit references in change comments to a VCS-independent date!committer format.</li>
<li>svn:special properties are translated to git symlink references.</li>
<li>It is never necessary to hint to reposurgeon or give it branch-rewrite rules to get a clean lift.  In some very unusual theoretical cases, post-lift surgery to sort out branches might be required, but no example of this has yet been observed in the wild.</li>
<li>What reposurgeon does is carefully and exhaustively <a href="http://www.catb.org/~esr/reposurgeon/reposurgeon.html">documented</a>, even in the strange edge cases.</li>
</ul>
<p>Most of the pre-existing conversion tools don&#8217;t do any of these things properly.  reposurgeon does them all, with an extensive regression-test suite to demonstrate correctness.  The code has also been field-tested on several large Subversion repositories (notably for the gpsd, Hercules, NUT, and Roundup projects) with good results.</p>
<p>I believe reposurgeon now does almost as good a job of lifting as is possible given the ontological differences between Subversion and git. I say &#8220;almost&#8221; only because there is still some room for improvement in recognizing Subversion branch-merges-by-copy and translating them as gitspace DAG merges.</p>
<p>Note one important restriction: reposurgeon can read Subversion dumps, but cannot <em>write</em> them &#8211; the downconversion from fast-import streams would be too lossy to be safe.</p>
<p>I started working on the Subversion-stream support about a year ago. What took so long was getting the multibranch support to automatically do the right thing in various semi-pathological merge cases.</p>
<p><a href="http://www.catb.org/esr/reposurgeon/">Fear the reposturgeon!</a></p>
