Zwei Modelle, zwei Kosten
SVN-Branches sind Verzeichniskopien im Repository. Git-Branches sind Zeiger.
Branching-Befehle
# SVN
svn copy ^/trunk ^/branches/feature -m "Create feature branch"
svn switch ^/branches/feature
# Git
git checkout -b feature
git switch feature
Merge-Tracking
Bis SVN 1.5 war Merging manuell. SVN 1.5+ fugte svn:mergeinfo hinzu. Git verfolgt Merges nativ im Commit-Graph.
Merging in der Praxis
# SVN merge feature back to trunk
svn switch ^/trunk
svn merge ^/branches/feature
svn commit -m "Merge feature"
# Git merge feature back to main
git checkout main
git merge feature
Konfliktauflosung
Beide Systeme verwenden Drei-Wege-Merge.
Wiederholtes Mergen
Git handhabt trivial "Ich habe letzte Woche von main gemerged, was hat sich geandert?".
Cherry-picking
# SVN
svn merge -c 12345 ^/trunk
# Git
git cherry-pick <sha>
Branch-Hygiene
Da Git-Branches gunstig sind, verwenden Teams sie freigiebig.
Sichtbarkeit
Git's git log --graph --all rendert den gesamten Branch- und Merge-Graph in Sekunden.
Wo SVN seinen Stand halt
- "Trunk only" mit seltenen Release-Branches.
- Per-Verzeichnis-Zugriffskontrolle.
Migrationsauswirkung
Die grosste kulturelle Verschiebung beim Wechsel von SVN zu Git ist Branching.