Voilà, j’ai fini : bitbucket.org/informfr/i6-frenc … ommits/all
Suite aux retours de Natrium, j’ai renommé le projet sans nom (qui contient i7-french-language) inform-french-libs, et j’y ai ajouté un dépôt git i6-french-language. Les deux dépôts sont dans dans la même organisation informfr, et dans le même projet inform-french-libs.
Pour faire ce dépôt, j’ai pas mal bricolé avec git, trichant pas mal de façon éhontée avec la git history pour préserver les dates et auteurs de commits initiaux. Le dépôt est donc a priori tel qu’il l’aurait été si Mule avait fait une conversion svn → git dès le départ, puis travaillé sur ce nouveau dépôt.
Pour référence, voici ce que j’ai fait (il m’aura fallu pas mal d’essais pour trouver ce qui a marché au final, je vous donne donc la version aboutie) :
Conversion du dépôt svn en dépôt git
git svn clone svn+ssh://akien@svn.tuxfamily.org/svnroot/informfr/informfr/ --trunk=inform6-fr/trunk
Cette commande crée un nouveau dépôt git à partir du dépôt svn passé en URL, et j’ai défini comme trunk le dossier inform6-fr/trunk, vu que je ne voulais avoir que l’historique pour la lib I6 dans ce nouveau dépôt.
Ça a affiché plein de trucs, m’a demandé mon mot de passe TuxFamily au moins 8 fois, mais au final ça m’a créé un dépôt git avec exactement ce que je voulais. Je n’ai pas cherché à faire importer les tags, préférant les refaire à la main plutôt que d’avoir a bricoler une séparation I6/I7.
Rebasage du dépôt git d’Hugo par dessus ce nouveau dépôt
Ça c’était le gros morceau. Je suis parti du travail déjà fait par Hugo pour extraire seulement les fichiers pertinents de son dépôt original (qui contenait des extensions en plus de la lib francophone, et pas French1PSP.h).
Premier problème : le premier commit d’Hugo ajoutait les fichiers French.h et FrenchG.h dans la même version que sur svn, donc a priori je n’avais qu’à me passer de ce premier commit et importer les changements à partir du 2ème commit. Le soucis est que lors de son import initial, Hugo a laissé son IDE retirer les espaces en fin de ligne qui existaient dans la version svn. Ça n’a évidemment pas plu à git lorsque j’ai essayé d’appliquer le deuxième commit, j’ai donc dû faire un commit intermédiaire moi-même pour retirer ces espaces en fin de ligne: github.com/akien-mga/inform6-fr … d6351fb7c6
Pour préserver l’ordre chronologique, j’ai dû antidater mon commit :
git commit --date="Fri Nov 21 00:01 2014 +0100"
Comme indiqué plus haut, le nouveau dépôt i6-french était bien fait par Hugo, à part la date de commit (git fait une différence entre date d’écriture du patch par l’auteur, et date de commit du patch par le committer, qui peut être une autre personne). Du coup le dépôt i6-french avait les bonnes dates d’écrire (s’échelonnant entre 2014 et 2015), mais toutes les dates de commit étaient le 25 mai 2016. Or ce sont ces dates de commit que Bitbucket montre, du coup ce n’est pas top pour voir rapidement quand un commit a été écrit.
Pour corriger ça, j’ai commencer par récupérer tous les commits sous forme de patchs :
git format-patch d8287d6^..2c63a41
Puis j’ai appliqué tous ces patches dans mon nouveau dépôt (de la transition svn → git) en utilisant l’option –committer-date-is-author-date pour m’assurer que la date de commit soit la même que la date d’écriture. Autre subtilité, pour que l’identité du committer ne soit pas la mienne mais celle d’Hugo, j’ai aussi dû tricher à ce niveau là :
GIT_COMMITTER_NAME='hlabrand' GIT_COMMITTER_EMAIL='<adresse email d'Hugo>' git am --committer-date-is-author-date 00*.patch
Et voilà ! Un beau dépôt tout neuf avec pas mal de bricolage, mais qui contient tout l’historique du dépôt SVN + du dépôt git d’Hugo