Sunday, January 17. 2010
A future for Svnmerge?
Svnmerge has always been the kid brother of Subversion. It's in the project's contrib directory, and is thus unversioned. Since it's a single Python script, users just download it directly from the repository. In the last year, the script has only seen a few non-trivial commits, and the mailing list has been almost silent.
There are some simple reasons for decline. First, Subversion itself, in version 1.5, has adopted some of the functionality of Svnmerge. In particular, svn now uses properties (svn:mergeinfo) to track the revisions that have and have not been merged into a particular branch. There are some limitations, of course. Most obviously, a branch can only be "reintegrated" into trunk once, which is not the workflow of many Svnmerge users. Also, to my knowledge, Subversion cannot merge between repositories, while Svnmerge can.
Second, Git, Mercurial, and other DVCS's now provide strong support for merge-heavy workflows. Both tools also have excellent "gateways" to Subversion. For example, Amanda's Github repository tracks the Subversion repository using some simple shell scripts.
Between these two forces, I think that much of the audience for Svnmerge has disappeared. Those left, sadly, will see even less support.
Monday, April 23. 2007
Improving svnmerge
There's been a lot of writing about svnmerge: Ken Kinder wrote a nice introductory article on the topic, and now there's a wiki and even a mailing list. Maybe someday soon it will depart the contrib/ purgatory!
One unusual use of svnmerge is to "branch" a public subversion repository into your local repository, to allow local development while still tracking the public trunk. This is related to vendor branches, but is more suited to the case where you'll be submitting changes back to the project, and is particularly useful if you have commit permission on the public repository. For me, I was merging from the Python repository (http://svn.python.org/projects/python/trunk/) to my own private repository (let's call it http://svn.v.igoro.us/python/trunk).
Svnmerge has a few weaknesses, but one that surprised me was this: while svnmerge can manage changes between different repositories, it can't do so when the repository-relative path is the same in each branch. In this case, the repository-relative path for both is /python/trunk, so svnmerge complains:
svnmerge: cannot init integration source '/python/trunk' It must differ from the repository-relative path of the current directory.
Continue reading "Improving svnmerge"
