La dernière fois, j’ai posté une méthode pour interfacer git avec un dépot CVS. Et bien aujourd’hui, on va faire pareil, mais avec un dépot subversion. Comme ça, pas de jaloux.
La procédure est un peu plus simple cette fois.
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, gitt 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 rebaseGit 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 rebaseVoilà, vous savez tout. Au besoin, consultez la doc de git-svn pour plus de détails. En attendant, bon WE à tous.
One Trackback
[...] Interfacer Git avec SVN [...]