Migrer un gros repository SVN vers GIT sous Windows avec SmartGit

J’ai eu récemment à migrer de très gros repositories SVN vers des repos GIT (Bitbucket en l’occurrence).

Alors par défaut, j’avais essayé svn2git. Problème, ça fait relativement n’importe quoi avec les branches et les tags, quand ce n’est pas tout simplement en train de planter lamentablement.

Puis on m’avait conseillé svn-all-fast-export de Qt, mais honnêtement ça me parait assez compliqué rien que de l’installer sur Windows, sans même parler de l’utiliser (apparemment la doc est assez vieille et plutôt parcellaire).

Finalement, au hasard d’une recherche, j’ai trouvé SmartGit.

La solution Smartgit

Il y a une version gratuite, utilisable apparemment quand vous n’êtes pas un professionnel ou en train de travailler pour une entreprise.

Une petite recherche sur internet permet de contourner la limite des 30 jours (en supprimant le fichier settings.xml)

Donc Smartgit.

Avant de commencer, sachez que le réglage des authorsfile se fait dans le fichier smartgit.properties, situé chez moi ici :

C:\Users\MON_LOGIN\AppData\Roaming\syntevo\SmartGit\8 .

Dans ce fichier, il faut ajouter la propertie smartgit.svn.authorsfile et bien préciser le chemin vers votre fichier en utilisant des doubles /. Par exemple comme ça :;

smartgit.svn.authorsfile=C://Users//MON_LOGIN//workspace//svn2git//authors.txt 

Il faut bien redémarrer Smartgit ensuite pour qu’il prenne en compte le nouveau authorsfile.

Récupérer (cloner) un repo SVN en local et le transformer en repo GIT

Vous ouvrez Smartgit, en haut à gauche, sélectionnez Repository > Clone

Puis vous entrez l’URL de votre repo SVN. Vous confirmez qu’il s’agit bien d’un repo SVN, et le clonage commence.

Une fois le trunk ramené, vous confirmez la petite popup en bas à droite de l’écran afin que Smartgit continue sa synchronisation et ramène tout le reste (les branches, les tags).

Ensuite vous attendez que Smartgit ramène tout.

Une fois ceci fait,

Clic droit sur le Trunk, puis faites Rename : renommez le en Master.

Vous verrez dans la partie Output s’afficher la commande précise que SmartGit est en train d’effectuer.

Pousser le master avec SmartGit

Puis faites click droit sur le master, faites Push To.

Clickez dans la popin sur Add Remote (en fait il faut maintenant dire à SmartGit vers quel repo distant Git on va envoyer le repo local).

Il vous demande vos credentials, ou de valider votre clef SSH/Passphrase, vous entrez les infos correspondantes (ou rien si vous n’avez pas de passphrase sur votre clef), et vous validez.

La remote origin ajoutée, on va maintenant pouvoir réellement envoyer les fichiers/modifs. Refaites le click droit sur le Master, puis PushTo.

Moi je clique sur la case Force puhsing (even if it’s not fast-forward).

On voit dans la partie Output qu’il est bien en train d’envoyer les données au repo distant.

Pousser les branches avec SmartGit

Ensuite on peut pousser les branches, de la même façon (PushTo). Par contre je n’ai pas réussi à les pousser toutes ensembles. J’ai donc poussé chaque branche une à une.

Encore une fois, cochez bien la case Force Pushing etc.

Et vous voyez le résultat.

Pousser les tagsavec SmartGit

Enfin, on peut pousser les tags. Moi j’ai toujours sélectionné les tags ensembles (quitte à en déselectionner certains), puis fait PushTo.

Et une fois encore, vous cochez bien la case Force Pushing (même si sur le screenshot elle n’est pas cochée).

Et voilà le résultat !

Conclusion

Utiliser SmartGit m’aura permit d’envoyer ce repo SVN, contenant facilement plusieurs milliers de commits, plus de 1000 tags, vers le nouveau repo GIT.

Autant vous dire que j’avais passé plusieurs jours à essayer de le faire avec l’outil embarqué de git (svn2git) et que ça avait merdé dans tous les sens…

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.