J'en avais également besoin, et avec l'aide de la réponse de Bombe + quelques bidouilles, je l'ai fait fonctionner. Voici la recette:
Importer Git -> Subversion
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
Après # 3, vous obtiendrez un message cryptique comme celui-ci:
Utilisation d'un niveau d'URL supérieur: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Ignorez cela.
Lorsque vous exécutez # 5, vous pouvez rencontrer des conflits. Résolvez ces problèmes en ajoutant des fichiers avec l'état "non fusionné" et en reprenant le rebase. Finalement, vous aurez terminé; puis synchronisez à nouveau vers le référentiel SVN, en utilisant dcommit
. C'est tout.
Garder les référentiels synchronisés
Vous pouvez maintenant synchroniser de SVN vers Git, en utilisant les commandes suivantes:
git svn fetch
git rebase trunk
Et pour synchroniser de Git vers SVN, utilisez:
git svn dcommit
Note finale
Vous voudrez peut-être essayer cela sur une copie locale, avant de postuler à un référentiel actif. Vous pouvez faire une copie de votre référentiel Git dans un emplacement temporaire; utilisez simplement cp -r
, car toutes les données sont dans le référentiel lui-même. Vous pouvez ensuite configurer un référentiel de test basé sur des fichiers, en utilisant:
svnadmin create /home/name/tmp/test-repo
Et vérifiez une copie de travail en utilisant:
svn co file:///home/name/tmp/test-repo svn-working-copy
Cela vous permettra de jouer avec les choses avant d'apporter des changements durables.
Addendum: si vous vous trompez git svn init
Si vous exécutez accidentellement git svn init
avec la mauvaise URL et que vous n'êtes pas assez intelligent pour effectuer une sauvegarde de votre travail (ne demandez pas ...), vous ne pouvez pas simplement exécuter à nouveau la même commande. Vous pouvez cependant annuler les modifications en émettant:
rm -rf .git/svn
edit .git/config
Et supprimez la section [svn-remote "svn"]
section.
Vous pouvez ensuite git svn init
recommencer.