Migrating gnucash website from svn to git

Geert Janssens janssens-geert at telenet.be
Sat Jan 12 13:06:16 EST 2013

On 03-12-12 15:22, John Ralls wrote:
> AFAICT git-svn doesn't work on a bare repo. You'll have to clone the Github repos and run git-svn-mirror on those clones after adjusting the config file to look like the one in the wiki page [1]. Set the "origin" remote to point to the gitolite bare repo.
> Gitolite provides a mirroring facility [2] that will automatically send changesets on to Github.
> Regards,
> John Ralls
> [1] http://wiki.gnucash.org/wiki/Git#Setting_up_and_Maintaining_the_Mirror
> [2] http://sitaramc.github.com/gitolite/mirroring.html
I've been looking into gitolite, the git-svn-mirror setup and stuff, and 
I think I am ready to setup the git repos on code.gnucash.org.

Here's what I propose:
- clone the github repos as bare repos under gitolite control. 
Initially, there should only one user with write access, namely the user 
that will push commits from the svn-mirror repos (see below).

- Gitolite note: we probably also want to set gitolite's LOCAL_CODE rc 
parameter to a directory inside the gitolite-admin repo as described 
under "alternate location" here [1] so the admins can all manage git 
hooks in that repo. The hooks themselves follow below.

- setup local git repos on code.gnucash.org that will only be used to 
sync from svn to git (let's call these svn-mirror repos). Note that 
git-svn-mirror accesses the svn repo read-only. With that in mind I 
think it would make sense to setup the svn mirror repos under the same 
user account as used for the svn repository itself or at least a user 
that has direct read access to the repo files on the server. That allows 
us to use a local file:/// url to read from the svn repo instead of 
going via the network svn+ssh:// route. As John briefly describes above, 
this involves following the steps in our wiki to set up and maintaining 
the git-svn mirror [2]. With the exceptions that
   (a) the svn repo can be accessed directly via a file:/// path and
   (b) the origin repo should be changed to the gitolite one. We may 
need to be careful here that user that pushes to the gitolite repos has 
proper (gitolite) write permissions to do so.

- It's not clear to me if any fetch on the svn-mirror repos will 
automatically trigger a push to the gitolite repos in this config or 
whether we still explicitly have to set up a post commit hook for this. 
That can be tested along the way.

- In any case, at this point, the svn repo's post commit hook should be 
altered to run the git-svn-mirror script to automatically update the 
relevant svn-mirror repos with each commit to svn. Since we're still 
testing, this can be done alongside the hook that triggers jeeves to 
update its mirror repos.

- If this works well (meaning that each commit to svn also properly ends 
up in the gitolite repos), we can go for the next step: make gitolite 
push to github and drop jeeves from the procedure. I looked at the 
gitolite mirror information [3], but I couldn't figure out how that 
would allow us to push changes to github. It seems to me this only works 
between gitolite managed repos. git comes with some kind of mirroring 
features as well which may be useful, but I haven't investigated this 
yet. Perhaps John knows how these work ? I found you can clone a repo 
with a --mirror option, but I don't know if that is what we are looking for.

- If that is working ok, we can continue setting up proper hooks in the 
gitolite repos, for example to send e-mails on each commit. The gitolite 
documentation regularly shows hooks.mailinglist [4] and similar git 
options, but don't detail how these are actually used. Searching the 
web, there are several examples (like this one [5]) though that explain 
how to send e-mails after commits.

Once we get here, we can evaluate again what still needs to be done for 
the git migration.


[1] http://sitaramc.github.com/gitolite/cust.html#pushcode
[2] http://wiki.gnucash.org/wiki/Git#Setting_up_and_Maintaining_the_Mirror
[3] http://sitaramc.github.com/gitolite/mirroring.html
[4] http://sitaramc.github.com/gitolite/git-config.html

More information about the gnucash-devel mailing list