Cosa intendiamo per performance
"Performance" nel controllo versione e multidimensionale: tempo di clone/checkout, velocita di log/blame, operazioni di branch, refresh del working tree.
Clone versus checkout
# SVN: fast for first checkout, slow for history queries
svn checkout https://svn.example.com/repo trunk
# Git: slower clone, instant history thereafter
git clone https://git.example.com/repo.git
Operazioni locali
git log --since='1 month'
svn log --limit 100
Operazioni di branch
Git e tipicamente 10-100x piu veloce per il branch switching.
Dimensione working tree
SVN puo fare checkout di sottodirectory economicamente. L'analogo Git e sparse checkout piu partial clone.
Dimensione repository su scala
Git memorizza la storia completa localmente. SVN serve solo cio che il client chiede.
Writer concorrenti
SVN serializza i commit al server.
Bandwidth di rete
Git pusha solo delta di commit non sul remote. SVN invia solo i file modificati ma per ogni commit.
Storage sul server
I pack file di Git usano compressione delta aggressivamente.
Verdetto quotidiano
Per un tipico progetto da 100k LOC con trenta ingegneri, le operazioni Git si percepiscono istantanee e quelle SVN lente.
Dove SVN scala oltre
- Monorepo massicci di contenuto binario.
- Accesso read-heavy.
- Bandwidth ai client vincolata.