Pourquoi migrer
SVN fonctionne. Mais son modèle centralisé, son branching lent et sa difficulté à intégrer avec le tooling moderne pousse la plupart des équipes vers Git.
Deux chemins de migration
- git-svn - fait le pont entre les deux systèmes.
- Conversion one-shot - exporter l'historique SVN vers Git.
Préparer
# authors.txt
jdoe = Jane Doe <[email protected]>
bsmith = Bob Smith <[email protected]>
svn log --xml https://svn.example.com/repo \
| grep author | sort -u \
| sed -E 's/.*>(.+)<.*/\1 = \1 <\[email protected]>/'
Conversion one-shot avec git-svn
git svn clone \
--stdlayout \
--authors-file=authors.txt \
https://svn.example.com/repo \
repo.git
cd repo.git
git for-each-ref refs/remotes/origin/tags --format='%(refname:short)' \
| while read ref; do
tag="${ref#origin/tags/}"
git tag "$tag" "$ref"
git branch -d -r "$ref"
done
Push vers un host Git
git remote add origin https://gitlab.example.com/team/repo.git
git push -u origin --all
git push origin --tags
Vérifier la migration
- Comparer les comptes de commits.
- Vérifier les auteurs et dates sur des commits représentatifs.
- Les comptes de tags et branches devraient correspondre.
Gérer les externals
- Vendor le code external dans le repo.
- Utiliser les submodules Git.
- Utiliser les gestionnaires de paquets du langage.
Formation
Les sauts conceptuels les plus difficiles SVN-vers-Git : la staging area, l'historique distribué, fast-forward versus merge commits.
Décommissionner SVN
Après vérification, gelez le repo SVN (lecture seule).