Der architektonische Unterschied
Subversion ist zentralisiert; Git ist verteilt.
Was "verteilt" ermoglicht
- Offline-Commits.
- Lokales Experimentieren.
- Disaster Recovery.
- Multi-Master-Workflows.
- Code von einem Vendor entkoppeln.
Was Zentralisierung ermoglicht
- Einzelne Quelle der Wahrheit.
- Per-Path-Zugriffskontrolle.
- Sequentielle Revisionsnummern.
- Locking.
Praktischer Vergleich
# Offline in Git
git commit -m "WIP"
git log
git diff HEAD~5
git checkout -b experiment
# Same operations in SVN, offline:
svn commit # error: cannot connect to server
svn log # error: cannot connect to server
svn diff -r 100 # error: cannot connect to server
Mobiles und Remote-Arbeiten
Die Dekade zwischen den Hauptzeiten von SVN und Git sah den Aufstieg von mobiler Entwicklung und globaler Remote-Arbeit.
Disaster Recovery
# Git: recover central repo from a clone
git clone --mirror /path/to/laptop/clone backup.git
cd backup.git
git remote add origin git@new-host:repo.git
git push --mirror origin
# SVN: requires server-side dumpfile
svnadmin dump /var/svn/repo > repo.dump
Vorbehalte mit verteilt
- Verteilt erzeugt eine Koordinationsfrage.
- Forks konnen still divergieren.
- Auditing und Zugriffskontrolle benotigen explizite Infrastruktur.
Hybrid
Tools wie git-svn uberbrucken die beiden.