Utiliser git-svn pour interfacer Git avec un depot subversion
Même si Git est le système de gestion de version le plus utilisé, on a parfois la malchance de tomber sur de vieux projets qui utilisent encore subversion. Heureusement, Git propose git-svn
, une interface qui permet de travailler sur un dépôt subversion grâce aux commandes Git.
La première étape, c'est bien entendu d'installer git-svn. Je vous laisse adapter la commande suivante à votre distrib :
sudo apt-get install git-svn
Créons un dépot git à partir du svn
git-svn clone http://svn.example.com/svn/projet -T trunk projet
Cette (longue) commande va créer un répertoire "projet", initialiser un dépot git, et y importer le trunk.
Si vous utilisez des svn:ignore, il est possible de les récupérer aussi
cd projet
git-svn show-ignore >> .git/info/exclude
Bon, nous voilà avec un dépot git et bonne et due forme. Bien entendu, vous pouvez utiliser toutes les fonctionalités de git normalement (git blame
, git log
, git stash
_, git bisect, etc.)
Bon ! Passons aux dev (comme d'hab, on évite de toucher à la branche master) :
git checkout -b dev
# dev dev dev
git add ...
git commit
# dev dev dev
git add ...
git commit
Nous voici avec plusieurs commit, qu'on aimerait reporter sur le dépot svn. D'abord, un update :
git svn rebase
Git va récupérer les modifs du dépot subversion, et les appliquer au dépot local avec la méthode rebase, ce qui signifie qu'il va appliquer tous les changements du dépot AVANT vos modifications. L'avantage, c'est que vos commit se retrouveront en queue de l'arborescence.
# Avant git svn rebase
E---F---G local:dev
/ <- clone
A---B---C---D svn
# Après git svn rebase
E---F---G local:dev
/
A---B---C---D svn
C'est clair ? Ok, maintenant, reste à comitter :
git svn dcommit
# dcommit, pas commit
local:dev
/
A---B---C---D---E---F---G svn
Git va reporter tous les commits, un par un, vers le dépot svn. Ensuite, il synchronise les dépots local et distant.
git checkout master
git svn rebase
Voilà, vous savez tout. Au besoin, consultez la doc de git-svn pour plus de détails. En attendant, bon WE à tous.