Logo Git

Convertir un dépôt Subversion en Git

git
svn


Vous avez choisi de passer l’ensemble de vos dépôts Subversion sous Git ? C’est une bonne chose. Le changement d’outils de versionning est une étape importante pour une entreprise avec le besoin de ne perdre l’historique. Nous allons donc voir comment conserver l’historique de vos commits ainsi que l’auteur de chaque commit.

Récupération des auteurs

Pour commencer nous allons récupérer la liste des utilisateurs de votre dépôt Subversion et les lister dans un fichier. Pour cela, nous utiliserons le log subversion au format XML, grep pour sélectionner les lignes contenant les auteurs, sort pour supprimer les doublons et trier par nom et enfin perl pour reformater la sortie pour générer notre fichier.

$ svn log ^/ --xml | grep -P "<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
$ cat users.txt
user1 = 
user2 =

Le fichier ainsi créé contient la liste de l’ensemble des utilisateurs ayant fait un commit sur votre dépôt. Vous devez le compléter pour mettre l’utilisateur git correspondant.

La deuxième solution utilise sed à la place de perl et pré-rempli le fichier, pour vous, dans un format compatible avec git.

$ svn log ^/ --xml | grep -P "<author" | sort -u | sed -e "s/<author>\(.*\)<\/author>/\1 = \1 <\1@mondomain.com>/g" > users.txt
$ cat users.txt
user1 = user1 <user1@mondomaine.com>
user2 = user2 <user2@mondomaine.com>

Le format de ce fichier est important aussi respecter le. Chaque utilisateur SVN doit avoir un nom et une adresse mail.

user1 = User1 <user1@domain.fr>
user2 = User2 <user2@domain.fr>

Transformation du dépôt Subversion en dépôt Git

Pour commencer, il va vous falloir installer git-svn. git-svn est un logiciel vous permettant de gérer un dépôt subversion avec votre ami git. Dans notre cas, il ne nous servira qu’a récupérer le dépôt subversion pour le transformer en dépôt git.

# apt-get install git-svn

Pour récupérer votre dépôt subversion, il vous faut utiliser la commande git svn clone avec les paramètres permettant de faire le lien entre les auteurs des 2 systèmes, les branches, les tags ainsi que le tronc (appelé master sous Git).

git svn clone https://svn.perhonen.fr/monprojet --authors-file=users.txt -s monprojet-svn -T trunk --no-metadata

Remplacer trunk par le nom du dossier contenant vos sources au sein du dépôt. Si vos sources se trouvent à la racine de votre dépôt remplacer -T trunk par -T ..

Envoi du dépôt au serveur Git

Pour commencer nous clonerons le dépôt une nouvelle fois pour supprimer les liens avec le serveur subversion.

git clone depot_svn depot_git

Puis nous modifierons l’origine du dépôt pour ajouter le lien avec notre serveur de dépôt git.

cd depot_git
git remote rm origin
git remote add origin git@git.perhonen.fr:team/monprojet.git

Pour finir nous enverrons l’ensemble sur notre serveur avec tout l’historique.

git push -u origin master

Votre dépôt subversion est maintenant sous git, n’oubliez pas de supprimer l’accès à celui-ci ou le mettre en lecture seul afin que plus personne ne commit dessus et vivez git.

Sources: http://docs.gitlab.com/ce/workflow/importing/migrating_from_svn.html

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.