Warum migrieren
SVN funktioniert seit zwei Jahrzehnten. Aber sein zentralisiertes Modell, langsames Branching und Schwierigkeiten mit moderner Tooling-Integration drangen die meisten Teams zu Git.
Zwei Migrationspfade
- git-svn - Brucke zwischen den Systemen.
- One-Shot-Konvertierung.
Vorbereiten
# 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]>/'
One-Shot-Konvertierung mit 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
Zu einem Git-Host pushen
git remote add origin https://gitlab.example.com/team/repo.git
git push -u origin --all
git push origin --tags
Migration verifizieren
- Commit-Zahlen vergleichen.
- Stichproben bei Autoren und Daten.
- Tag- und Branch-Zahlen sollten ubereinstimmen.
Externals handhaben
- Externen Code vendoren.
- Git-Submodule verwenden.
- Package Manager verwenden.
SVN ausser Betrieb nehmen
Nach Verifizierung den SVN-Repo einfrieren (read-only).