De svn à git

Comment migrer un repo svn vers git ? En utilisant svn2git bien sûr!

Mais attention il y a une grosse feinte, le conseil qui suit peut faire gagner des journées entières.

Il y a svn2git et svn2git

Le premier est bien référencé, correctement documenté et facile à mettre en oeuvre. Il fonctionne sur le serveur svn (très lent) ou à distance (très très très lent)

Mais globalement il ne marche pas dès que le repo svn est un peu complexe. (dans mon cas + 13000 révisions et déjà une migration depuis cvs!)

Le second ne sort pas en premier sur google, vous devrez compiler les sources, et la doc est bien cachée (en fait il n’y a que des exemples). Il ne fonctionne que sur le serveur svn.

Mais il est très rapide (moins de 5 min pour mon repo avec 13000 révisions) et  permet simplement de définir des règles pour configurer la conversion des branches et tags. On peut même transformer un repo svn en n repo git en une seule passe.

Voici donc une mini doc pour utiliser le bon svn2git

Installer et compiler (sous ubuntu)

sudo apt-get install libsvn-dev libqt4-dev
git clone git://gitorious.org/svn2git/svn2git.git
cd svn2git
qmake
make

Vous devrier avoir un éxécutable: svn-all-fast-export

Créer un fichier auteurs

Git identifie les utilisateurs par leur email, svn par un identifiant, il faut donc créer un fichier de correspondance entre id svn et email, soit à la main soit de manière automatique

 

#!/usr/bin/env bash
authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
  echo "${author} = NAME ";
done

Créer un fichiers rules

svn2git permet de décrire dans un fichier rules la manière dont on va mapper la structure de répertoire de svn dans des repos et branches git. Pour bien faire les choses il faut connaitre la structure des répertoires svn et leur évolution depuis le début. svneverever vous sera bien utile.

Go

Plus qu’à lancer la commande suivante:
./svn-all-fast-export --identity-map authors  --rules rules --stats pathToYourSvnRepo
En cas d’erreur il est possible de mettre à jour le fichier rules et de repartir de là où on en était.
Bon Git !

2 thoughts on “De svn à git

  1. Roger

    excellent utilitaire!!

    Est il possible de garder une quelconque reference aux revisions de SVN lors de l’import, de maniere a les voir apparaitre lors d’un “git log” sur le reperoire git obtenu

Comments are closed.