git svn en dix minutes

Comment utiliser git sur un dépôt svn ?

On n’a parfois pas le choix, on doit travailler sur un projet qui dispose d’un dépôt subversion (oui oui, suivez mon regard ;) ).
Ceci impose donc d’être connecté pour faire ses commits, ceci impose donc de penser à faire ses commits avant d’éditer un autre fichier, ceci impose donc, …., bref vous l’avez compris je n’aime pas le côté limitant de svn. Il peut freiner votre envie de développer en sachant que vous ne pourrez garder trâce de vos essais car vous ne pourrez pas les commiter.
On ne peut pas suivre le principe du « commit early – commit often » (commite tôt – commite souvent), principe pertinent car il permet de progresser très vite.

Voici une parade permettant d’utiliser GIT, le gestionnaire de version décentralisée sur un dépôt svn, vous permettant ainsi de passer outre ces petites limitations.

La base

Récupérer la copie distante :
Veillez à avoir créer les dossiers tags et branches sur votre dépôt distant pour garder un schéma de répertoire à la svn.

git svn clone https://salix.svn.sourceforge.net/svnroot/salix/lxc-salix -T trunk -b branches -t tags

On travaille :

code ...code...code...test

On commite :

git add mon_fichier
git commit -m "j'ai essayé ceci"

On travaille :

vim fichier1 fichier2

On choisit de ne commiter que les changements de fichier1 :

git add fichier1
git commit -m "ceci semble mieux"

On continue, on vérifie quels fichiers ont été modifiés :

git status

On choisit les commits à réaliser, et on peut publier l’ensemble des commits sur le dépôts svn.

git add fichierX
git commit -m "ça fonctionne avec ça"
...
...
git svn dcommit

Un peu plus que la base

Les branches

Envie de travailler sur une branche de test plutôt que sur la principale qui est la la branche trunk. Il faut créer une branche sur le dépôt svn puis travailler sur une branche locale qui est synchronisée avec le dépôt distant.

git svn branch -m "branche de test" testouille_b
git checkout local/testouille_b testouille_b

Les commits se font de la même manière (git commit….git svn dcommit).
Pour retravailler sur la branche principale :
git checkout master ; git svn rebase

Pour supprimer une branche :
git branch -D local/testouille_b
git branch -D -r testouille_b

Pour fusionner une branche (merging) :
git checkout testouille_b
git merge --squash <ID du commit à merger>
git commit
git svn dcommit

Les tags

Pour figer votre développement et mettre à disposition une version utilisable, vous pouvez vous servir des tags.
Après avoir vérifié que vous êtes bien sur la branche master , vous pouvez créer votre tag qui se créera automatiquement sur le dépôt distant.

git svn tag -m "version 0.1" 0.1

Quelques liens

- Page de manuel de git-svn
- git svn cheatsheet for git rebel in an svn workplace
- git svn crash course


Vus : 2161
Publié par Fred Galusik : 56