Import and tracking of svn on github

Tim Abell tim at timwise.co.uk
Sat Apr 11 17:32:41 EDT 2009


An open letter to support at github.com
<mailto:support at github.com>---------------

Hey there!

Firstly thanks for a fantastic service.

I would like to politely encourage you lovely people at github to 
support tracking of public subversion (svn) servers.

I appreciate your sentiment that not supporting svn meta data is "/our 
gentle way of saying it's time to move to git full-time/" as stated in 
your comment on the relevant github blog entry 
<http://github.com/blog/156-subversion-importing>, and I agree that full 
migration to git is a desirable result.

I am making some presumptions about what drives github (as many [paying] 
users as possible?), and I am aware there would be work involved for 
yourselves, however I will present some reasons why I think it would be 
good for github to support central tracking of public svn servers, both 
for github, and for the wider community.

I will use the gnucash project as an example, as this is what I've been 
attempting to work on recently.

For many open source projects using svn, the core developers who have 
svn commit rights are likely to be more or less comfortable with the 
status quo. They are already able to easily maintain versioned code for 
their project, and git offers only a minor practical gain for them. 
There is also likely to have been a reasonable investment in 
infrastructure around the svn server, such as build servers, irc bots, 
mailing bots, maintaining committer lists, web based svn access and 
documentation of the development process.

This means it is unreasonable for an outsider like myself to 'demand' 
that an established project move to git for source code management 
(scm), a move which as highlighted above is extra work for those 
volunteers for little benefit to them.

So this leaves a potential new contributor to a project such as gnucash 
with a steep barrier to creating any significant contributions. When 
creating and testing anything more than a relatively simple patch, it is 
highly desirable to be able to track changes in a local scm. As you are 
no doubt aware, svn offers no support for non-core developers to manage 
their code. The central commit rights model also makes it less useful to 
experiment, as there is a large barrier to publishing experimental 
changes and gaining an audience. This is damaging to the open source eco 
system.

I have tried several approaches when attempting to create, manage and 
publish modifications to gnucash, none of which are entirely satisfactory:

    1) Using github to clone the svn server directly.
    This is fine for a one off migration, but without a complete move by
    the core developers the lack of svn metadata means that the git
    repository is forever stuck in time and becomes decreasingly useful
    as the svn version moves ahead. I think most people who would like
    to use github to track a public svn server or open source project
    will get no further than this.

    2) Local import from the svn server, followed by a push to github.
    This is effective, and allows one to continue to track the svn
    server. The original clone of a project such as gnucash (11k
    commits) takes considerable time (eight hours or more), and due to
    the non-portability of the svn metadata this process effectively has
    to be repeated by every new user who wishes to use this clone
    without falling behind the svn server (unless we rely on the
    original importer to keep grabbing changes). I suspect this is too
    much to expect from many casual new contributors.

    3) Using a bazaar (bzr) branch on launchpad.net
    <https://code.launchpad.net/>.
    Launchpad will centrally clone and track a public svn server
    <https://help.launchpad.net/Code/Imports>. Personally I am not keen
    on bzr, and I'd take a wild guess and say you guys and gals prefer
    git too. I also ran into issues with the build scripts of gnucash
    expecting to be run from either an svn or a git working copy (a sign
    that at least one core developer is already using git privately).

    4) Publishing patches on the bug tracker or mailing list.
    This is an inferior model to the git method of sharing changes, and
    makes it hard to collaborate on new features outside of the core
    development group.

This currently leaves bzr/launchpad as a potentially attractive solution 
for new contributors, which I would imagine is not your ideal scenario.

If your objective is as stated to encourage projects to move from svn to 
git, then I suggest to you that providing a continuous pull from the 
primary svn server would ease the transition for many projects. If there 
were to be a single central git repository on github that tracked the 
svn server, then it would make it easier for both new contributors and 
existing developers to begin working on the code primarily with git. 
This would include merging suggested changes or patches from new 
contributors to those with commit access using the excellent git model 
of publish and pull. Once this is the norm on a project it becomes much 
easier for the project to move completely to git as all the core 
developers can say "hey, we're all using git most of the time now, let's 
drop svn completely" and make the final jump.

So in summary, I believe that providing continuous import from svn to 
github would encourage /more/ projects to migrate to github, not less. 
And that providing this service would be an enormous boon to the open 
source eco system.

I hope I have made a persuasive argument, and look forward to your response.

Relevant links:

    * github blog on svn imports
      <http://github.com/blog/156-subversion-importing>
    * github svn import guide
      <http://github.com/guides/import-from-subversion>
    * launchpad svn import information
      <https://help.launchpad.net/Code/Imports>
    * gnucash bazaar branches <https://code.launchpad.net/gnucash>,
      including one tracking trunk
    * me on github <http://github.com/timabell>, including various
      gnucash import attempts
    * gnucash wiki page on git <http://wiki.gnucash.org/wiki/Git>, which
      describes the trials of maintaining both in parallel
    * my git-svn ramblings <http://timwise.wikispaces.com/git+svn>


Yours

Tim Abell
http://www.timwise.co.uk/
tim at timwise.co.uk <mailto:tim at timwise.co.uk>



More information about the gnucash-devel mailing list