gitolite/doc/1-migrate.mkd
Sitaram Chamarty c54d3eabbc all src: (please read full commit message): allow local admin-defined hooks
You can now add your own hooks into src/hooks/ and they get propagated
along with the update hook that is present there now.  Please read the
new section in the admin document, and make sure you understand the
security implications of accidentally fiddling with the "update" script.

This also prompted a major rename spree of all the files to be
consistent, etc.  Plus people said that the .sh and .pl suffixes should
be avoided (and I was feeling the same way).  I've also been
inconsistent with that "gl-" prefix, so I cleaned that up, and the 00-
and 99- were also funny animals.

Time to get all this cleaned up before we get 1.0 :)

So these are the changes, in case you're looking at just the commit
message and not the diffstat:

    src/pta-hook.sh -> src/ga-post-update-hook
    src/conf-convert.pl -> src/gl-conf-convert
    src/00-easy-install.sh -> src/gl-easy-install
    src/99-emergency-addkey.sh -> src/gl-emergency-addkey
    src/install.pl -> src/gl-install
    src/update-hook.pl -> src/hooks/update
2009-11-13 18:37:46 +05:30

3.3 KiB

migrating from gitosis to gitolite

[TODO: make the migration tool fix up gitweb and daemon control also...]

Migrating from gitosis to gitolite is pretty easy, because the basic design is the same.

Here's how we migrated my work repos:

  1. login as the git user on the server, and get a bash shell prompt

  2. disable gitosis by renaming /usr/bin/gitosis-serve to something else. This will prevent users from pushing anything while you do the backup, migration, etc.

  3. edit ~/.ssh/authorized_keys and carefully remove all the lines containing "gitosis-serve", as well as the marker line that says "auto-generated by gitosis, DO NOT REMOVE", then save the file. If the file did not have any other keys and is now empty, don't worry -- save it anyway because gitolite expects the file to be present (even if it is empty).

  4. For added safety, delete the post-update hook that gitosis-admin installed

    rm ~/repositories/gitosis-admin.git/hooks/post-update
    

    or at least rename it to .sample like all the other hooks hanging around, or edit it and comment out the line that calls gitosis-run-hook post-update.

    If you do not do this, an accidental push to the gitosis-admin repo will mess up your ~/.ssh/authorized_keys file

  5. take a backup of the ~/repositories directory

Now, log off the server and get back to the client:

  1. follow instructions to install gitolite; see the install document. Make sure that you don't change the default path for $REPO_BASE if you edit the config file!

  2. convert your gitosis config file. Substitute the path for your gitosis-admin clone in $GSAC below, and similarly the path for your gitolite-admin clone in $GLAC

    src/gl-conf-convert < $GSAC/gitosis.conf > $GLAC/gitolite.conf
    

    Be sure to check the file to make sure it converted correctly

  3. copy the keys from gitosis's keydir (same meanings for GSAC and GLAC)

    cp $GSAC/keydir/* $GLAC/keydir
    
  4. Important: expand any multi-key files you may have. Here's an explanation of what multi-keys are, how gitosis does them and how gitolite does it differently.

    You can split the keys manually, or use the following code (just copy-paste it into your xterm after "cd"-ing to your gitolite-admin repo clone):

    wc -l keydir/*.pub | grep -v total | grep -v -w 1 | while read a b
    do
        i=1
        cat $b|while read l
        do
            echo "$l" > ${b%.pub}@$i.pub
            (( i++ ))
        done
        mv $b $b.done
    done
    

    This will split each multi-key file (say "sitaram.pub") into individual files called "sitaram@1.pub", "sitaram@2.pub", etc., and rename the original to "sitaram.pub.done" so gitolite won't pick it up.

    At this point you can rename the split parts more appropriately, like "sitaram@laptop.pub" and "sitaram@desktop.pub" or whatever. Please check the files to make sure this worked properly

  5. Check all your changes to your gitolite-admin clone, commit, and push