{"id":4691,"date":"2012-11-04T11:58:00","date_gmt":"2012-11-04T16:58:00","guid":{"rendered":"http:\/\/esr.ibiblio.org\/?p=4691"},"modified":"2014-03-10T04:44:02","modified_gmt":"2014-03-10T08:44:02","slug":"reposurgeon-2-0-announcement-the-full-orchestra-version","status":"publish","type":"post","link":"http:\/\/esr.ibiblio.org\/?p=4691","title":{"rendered":"reposurgeon 2.0 announcement &#8211; the full-orchestra version"},"content":{"rendered":"<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>\n<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>\n<p><!--more--><\/p>\n<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>\n<ul>\n<li>Branchy repos are automatically handled correctly, with trunk mapped to master and Subversion branches maped to gitspace branches.<\/li>\n<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>\n<li>Multibranch commits are automatically split into annotated per-branch commits.<\/li>\n<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>\n<li>Ersatz branch copies consisting of a plain directory copy followed by multiple adds are detected and treated like intentional branch creations.<\/li>\n<li>svn:ignore property settings and clears are automatically translated to equivalent creations and removals of .gitignore files.<\/li>\n<li>There is semi-automated support for lifting CVS and Subversion commit references in change comments to a VCS-independent date!committer format.<\/li>\n<li>svn:special properties are translated to git symlink references.<\/li>\n<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>\n<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>\n<\/ul>\n<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>\n<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>\n<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>\n<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>\n<p><a href=\"http:\/\/www.catb.org\/esr\/reposurgeon\/\">Fear the reposturgeon!<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I shipped reposurgeon 2.0 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. To go with this, there is a new version of&hellip; <a class=\"more-link\" href=\"http:\/\/esr.ibiblio.org\/?p=4691\">Continue reading <span class=\"screen-reader-text\">reposurgeon 2.0 announcement &#8211; the full-orchestra version<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,13],"tags":[33],"class_list":["post-4691","post","type-post","status-publish","format-standard","hentry","category-new-on-my-website","category-software","tag-reposurgeon","entry"],"_links":{"self":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts\/4691","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4691"}],"version-history":[{"count":5,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts\/4691\/revisions"}],"predecessor-version":[{"id":5345,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=\/wp\/v2\/posts\/4691\/revisions\/5345"}],"wp:attachment":[{"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4691"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4691"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/esr.ibiblio.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4691"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}