Migrating gnucash website from svn to git
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 . Set the "origin" remote to point to the gitolite bare repo.
> Gitolite provides a mirroring facility  that will automatically send changesets on to Github.
> John Ralls
>  http://wiki.gnucash.org/wiki/Git#Setting_up_and_Maintaining_the_Mirror
>  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  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 . 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 , 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  and similar git
options, but don't detail how these are actually used. Searching the
web, there are several examples (like this one ) 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.
More information about the gnucash-devel