-
Passer de SVN à Git + Gitosis
Par divarvel dans GNU / Linux, Free Software le 12 Février 2010 à 21:39
[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
gitEnsuite, on installe gitosis
# aptitude install python-setuptools
# git clone git://eagain.net/gitosis.git
# cd gitosis
# pyton setup.py installOn 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
$ exitToute 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-repoOn 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_tmpDerniè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/masterEt voilà !
Sources :
Tags : svn, git, gitosis, scm






