• Passer de SVN à Git + Gitosis

    Git Logo

    [EDIT] Je conseille (et j'utilise) désormais gitolite plutôt que gitosis.

    J'ai récemment réalisé la migration de tous les projets EklaWeb de Subversion vers Git.

    Si vous voulez savoir pourquoi, je vous conseille cet excellent article de Scott Chacon
    Pour résumer,

    • Git est plus rapide
    • Git est plus puissant
    • Git est plus flexible

    J'ai ainsi migré 3 dépôts SVN vers Git très simplement

    Je détaille la procédure pour des systèmes à base de Debian (mais ça devrait pas être trop dur à adapter)

    Étape 1 - Installer et configurer git sur le serveur :

    Installer git sur le serveur de dev

    #aptitude install git-core

    Installer gitosis

    Le principe, c'est que tous les commits se font via SSH. Un user spécial sert à pusher / puller.

    On commence donc par créer cet user (qu'on appellera git).

    # adduser 
    --system
    --shell /bin/sh
    --gecos 'git version control'
    --group
    --disabled-password
    --home /home/git
    git

    Ensuite, on installe gitosis

    # aptitude install python-setuptools
    # git clone git://eagain.net/gitosis.git
    # cd gitosis
    # pyton setup.py install

    On indique notre clé publique à gitosis (fichier id_rsa.pub, préalablement envoyé sur le serveur, par exemple dans /tmp/id_rsa.pub)

    # su git
    $ gitosis-init < /tmp/id_rsa.pub
    $ exit

    Toute l'idée de gitosis, c'est que la conf se fait en modifiant des fichiers contenus dans un dépôt git. Un post-update hook se charge de déployer les changements.

    On s'assure que le hook est bien activé (en le rendant exécutable)

    # chmod +x /home/git/repositories/gitosis-admin.git/hooks/post-update

    On peut maintenant s'occuper de la conf gitosis elle même.

    Tout se passe maintenant sur votre machine (celle d'où vient la clé publique mentionnée précédemment)

    On clone le dépôt qui contient la conf gitosis

    $ git clone git@votre-serveur.tld:gitosis-admin.git && cd gitosis-admin

    Le dépôt contient un fichier gitosis.conf qui contient la conf proprement dite, et un dossier keydir qui contient les clés publiques des gens (fichiers nommés login@host.pub).

    On peut créer des groupes (ensemble de gens, qui ont des droits sur des ensembles de dépôts).

    On crée des nouveaux dépôts

    En fait il suffit d'autoriser l'accès à ces dépôts.

    Dans le fichier gitosis.conf :

    [group your-team]
    members = divarvel@theophane skreo@theobald
    writable = repo autre-repo

    On rajoute les clés publiques dans le dossier keydir

    On commit et on push

    $ git commit -a -m "Add: Dépôts repo et autre-repo et autorisations pour Skreo" && git push origin master

    On peut désormais s'occuper d'importer les anciens dépôts

    Étape 2 - Importer les dépôts sous SVN

    On installe git et on configure deux trois trucs

    # aptitude install git-core git-svn
    # git config --global user.name "divarvel"
    # git config --global user.email "foo@bar.com"

    On commence par préparer un fichier (par exemple ~/users_map.txt) pour mapper les utilisateurs SVN à des utilisateurs git. À gauche, l'utilisateur svn, à droite l'utilisateur git.

    divarvel = divarvel <foo@bar.com>
    skreo = skreo <bar@baz.com>

    Ensuite on importe le dépôt SVN. On passe par un dépôt git temporaire que l'on clône pour avoir un dépôt clean à la fin.

    $ mkdir repo_tmp && cd repo_tmp
    $ git svn init http://votre-serveur.tld/depot-svn --no-metadata
    $ git config svn.authorsfile ~/users_map.txt
    $ git svn fetch
    $ cd ..
    $ git clone repo_tmp repo && rm -Rf repo_tmp

    Dernière étape, envoyer ce dépôt sur le serveur.

    Quand on clone un dépôt, le shortcut origin est par défaut le dépôt duquel on a clôné. Dans notre cas, c'était un dépôt temporaire qu'on vient de supprimer, il on remplace donc ça par l'adresse du dépôt distant.

    $ cd repo
    $ git remote rm origin
    $ git remote add origin git@votre-serveur.tld:repo.git
    $ git push origin master:refs/heads/master

    Et voilà !

    Sources :

    « Un petit script pour faire du BenchmarkLa veille du départ »

    Tags Tags : , , ,