Git et SVN sont sur un bateau
Par hr le jeudi 5 février 2009, 16:50 - code - Lien permanent
La découverte de git (le site web a changé pour devenir un peu plus web2.l0l) me fait penser à la découverte de linux ou de python. A chaque fois que je lis une nouvelle page de man ou un manuel je découvre une fonction ou un comportement qui me laisse penser que cet outil est très bien conçu. Il est si bien conçu qu'il accepte même de dialoguer avec ses petits amis les plus répandus comme cvs ou svn.
Lorsqu'on doit travailler sur un projet dont le dépôt est en subversion, on n'a pas forcément envie de perdre ses petites habitudes avec git(1). Voici donc une méthode construite sur la base de la page de man (git-svn(1)) et divers documents sur le net. Je travaille dans un environnement debian etch donc certaines commandes git(1) pourront vous sembler étrange ou obsolète. Pour rappel sur une etch :
$ git --version git version 1.4.4.4
Il faut installer les paquets git-core et git-svn pour pouvoir procéder à la suite.
Commençons par créer un environnement git propice à l'accueil d'un projet sous subversion puis importons ce projet.
$ git svn init http://svn.server/project/trunk project $ cd project $ git svn fetch
Le fetch peut prendre un certain temps avec un dépôt subversion distant et un grand nombre de révisions. Il est possible, dans ce cas, de ne récupérer que la dernière version ou un extrait entre deux révisions précisées :
$ git svn fetch -rREV[:REV]
Dans ce cas, l'historique sera incomplet.
Une fois l'historique subversion récupéré, un peu de nettoyage dans les objets git s'impose :
$ git repack -d
Les fichiers ne sont pas visibles sur le disque à cet instant, il y a deux alternatives pour les faire apparaitre. Soit mettre à jour les sources soit créer une branche :
$ git svn rebase ou $ git checkout -b dev
Je préfère personnellement la création de branche qui me semble plus en phase avec la façon dont git doit être utilisé.
A partir de là, c'est assez simple, il suffit de faire ses modifs, les publier à grand coups de git commit et les pousser vers le dépôt subversion grâce à git svn dcommit.
La mise à jour de la copie locale à partir du serveur subversion se fait grâce à git svn rebase.
Malheureusement, la version de git de la etch ne permet pas simplement d'associer des branches git à des branches svn.
Références
git-svn(1)- http://kdevelop.org/mediawiki/index.php/KDevelop_4/Using_Git_for_Development
- http://gitready.com/beginner/2009/02/04/converting-from-svn.html
- http://google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html