Écrit par Abdourahmane Sow
Dans cette article nous allons voir comment faire une migration de SVN vers GIT.
Problématique
Nous venons de gagner un grand marché pour faire la correction de bugs et intégrer de potentielles évolutions. Les anciens prestataires qui travaillaient sur cette application nous ont fourni un dump SVN et nous souhaitons à partir de ce dump faire une migration vers git.
Essayer de migrer de svn vers git sur une machine lente peut s’avérer être une tâche compliquée. Si le référentiel svn a suffisamment d’enregistrements, il générera constamment des erreurs pour diverses raisons.
La rôle des différents répertoires SVN lors de notre migration vers GIT
- Trunk -> Créer notre branche master dans notre dépot (git ,bitbucket …)
- Tags -> Créer nos releases dans notre dépot (git ,bitbucket …)
- Branches -> Créer les branches dans notre dépot (git ,bitbucket …)
Solution
À travers cette article nous tenterons d’apporter une solution à cette problématique.
Étape 1- Charger le dump svn dans un serveur svn local
$ svnadmin load ouidou_project < ouidou.dump
Étape 2- Générer la fiche d’auteur
$ svn log -q | awk -F ‘|’ ‘/^r/ {sub(“^ “, “”, $2); sub(“ $”, “”, $2); print $2" = “$2” <”$2">”}’ | sort -u > authors.txt
Étape 3- Trouver le numéro de révision auquel le projet a été créé
$ svn log --stop-on-copy
Étape 4- Convertir notre projet SVN en un projet GIT
$ git svn clone -r1:HEAD --no-minimize-url --stdlayout --no-metadata --authors-file authors.txt ouidou_project
Étape 5- Migrer vers le dossier de référentiel
$ cd ouidou_project# ajouter le path du depot de votre choix$ git remote add origin https://github.com/abdou/ouidou.git
Étape 6 : Conversion des branches SVN en branches Git
La commande git svn clone crée une branche master à partir du trunk qui est prêt à être envoyé vers le référentiel git distant. Mais nous voulons aussi pousser les branches. Utilisez les commandes ci-dessous pour cela :
$ git checkout -b MyDevBranch origin/MyDevBranch
Étape 7 : Migration des tags(versions logicielles)
La commande git svn clone ne crée pas de tags, suivez les commandes ci-dessous pour créer des tags et les préparer à être envoyées à notre dépôt.
$ git tag$ git checkout origin/tags/MyDevBranch-1.0$ git branch -a$ git tag -a MyDevBranch-1.0 -m "creating tag"$ git push origin master MyDevBranch MyDevBranch-1.0
Si de nouveaux commits sont ajoutés à SVN, nous pouvons faire l’une des deux choses suivantes. Si nous avons des modifications dans git que nous voulons conserver, nous pouvons simplement fusionner les modifications de svn :
$ git svn fetch
$ git merge svn/trunk
Si, cependant, nous voulons mettre en miroir svn avec git, nous pouvons simplement réinitialiser le dépôt git :
$ git svn fetch
$ git reset --hard svn/trunk
Conclusion
Les outils de versionning utilisés varient d’un projet à un autre ou d’une entreprise à une autre.
Git est un outil indispensable pour enregistrer l’historique de notre code source. Cet historique prend de la valeur au fur et à mesure que le projet évolue; c’est une archive unique de collaboration qui décrit comment le projet est devenu ce qu’il est aujourd’hui.