Embauchez-moi

Je suis freelance ! Besoin d'un professionnel du développement web ? Pourquoi ne pas me passer un coup de fil ?

Plus d'infos sur… http://thibault.jouannic.fr

mots-cles : Ingénieur web freelance Symfony eZ Publish Solr

Utiliser git svn pour interfacer Git avec un depot subversion

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 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.


One Trackback

  1. [...] Interfacer Git avec SVN [...]