Git è veloce. Tutti — anche i più fedeli utenti degli altri sistemi —
generalmente riconoscono a Git tale titolo. Con Git, tutte le operazioni sono eseguite localmente,
concedendo un pò di vantaggio a SVN e Perforce, entrambe le quali richiedono accesso alla rete per
alcune operazioni. Comunque, anche se confrontato con altri DSCMs che effettuano operazioni
localmente, Git è bello veloce.
Parte di questo è possibilmente dovuto al fotto che è stato costruito per lavorare sul
kernel di Linux, il che significa che ha dovuto affrontare in modo efficiente un grosso
repository sin dal primo giorno. Inoltre, Git è scritto in C e riduce l'overhead dei
runtime tipici dei linguaggi di più alto livello.
Un altro motico per cui Git è veloce è che gli sviluppatori principali hanno fatto
della velocità un obiettivo progettuale dell'applicazione.
In seguito ci sono i valori di benchmark che ho eseguito su tre copie
del repository contentente il codice sorgente di Django in 3 diversi SCM:
Git, Mercurial and Bazaar. Ho anche eseguito test di questa cosa in SVN,
ma credimi, è più lento - praticamente puoi prendere i valori di Bazaar e
aggiungere la latenza di rete....
Il risultato finale è stato quello che in tutto, tranne che
nell'aggiunta di nuovi file, Git è risultato il più veloce.
(Anche per grandi operazioni di commit, che Hg praticamente
eguagliava, ma considera che il commit provato era così grande
che difficilmente sarà mai fatto in applicazioni reali qualcosa
del genere - le comuni operazioni di commit sono molto più veloci
in Git)
|
Git |
Hg |
Bzr |
| Init |
0.024s |
0.059s |
0.600s |
| Add |
8.535s |
0.368s |
2.381s |
| Status |
0.451s |
1.946s |
14.744s |
| Diff |
0.543s |
2.189s |
14.248s |
| Tag |
0.056s |
1.201s |
1.892s |
| Log |
0.711s |
2.650s |
9.055s |
| Commit (Grande) |
12.480s |
12.500s |
23.002s |
| Commit (Piccolo) |
0.086s |
0.517s |
1.139s |
| Branch (A freddo) |
1.161s |
94.681s |
82.249s |
| Branch (A caldo) |
0.070s |
12.300s |
39.411s |
I dati di branch a freddo e a caldo sono relativi a quei test provati
la prima e la seconda volta creando una branch su un repository - essendo il
secondo valore una branch con una cache disco ancora "calda".
Sarebbe da notare che sebbene i dati per 'add' sono molto più lenti,
questo vale per inserimenti di numerosi file - più di 2000. Per la gran parte
di quello che la maggioranza delle persone fa quotidianamente, operazioni
di 'add' impiegano soltanto una frazione di secondo in ciascuno di tali sistemi
Tutte le altre operazioni testate qui (eccezion fatta per grandi commit, forse)
sono maggiormente indicative sulle cose che potresti effettivamente fare giorno
per giorno.
Questi valori non sono molto difficili da riprodurre, basta semplicemente clonare il progetto
Django in ciascuno dei sistemi e provare alcuni comandi in ciascuno.
git clone git://github.com/brosner/django.git dj-git
hg clone http://hg.dpaste.com/django/trunk dj-hg
bzr branch lp:django dj-bzr
svn checkout http://code.djangoproject.com/svn/django/trunk dj-svn