Git er raskt. Alle—selv de fleste av kjernebrukerne av disse andre
systemene—innrømmer det. Med Git er alle operasjoner utført lokalt,
noe som gir et forsprang til SVN og Perforce som begge behøver
nettverkstilgang for enkelte operasjoner. Men, selv sammenliknet med DSCM som
også utfører operasjoner lokalt er Git raskt.
Dette er delvis fordi det ble bygd for å håndtere utviklingen av Linuxkjernen,
hvilket betyr at det helt fra dag 1 måtte kunne jobbe effektivt med store
kildekodearkiv. I tillegg er Git skrevet i C, noe som reduserer kodens kjøretid
sammenliknet med språk på høyere nivå. En annen grunn til at Git er så raskt er
at hovedutviklerne gjorde det til et av målene med systemet.
Følgende er kjøretidtester jeg har utført på 3 kopier av Djangos kildekodearkiv
med 3 forskjellige SCM: Git, Mercurial og Bazaar. Jeg testet også noe av dette
i SVN, men tro meg, det er tregere—ta Bazaars resultater og legg på
nettverksforsinkelse...
Sluttresultatet var at for alt bortsett fra å legge til nye filer, var
Git raskest. (Også veldig store commits, noe Hg stort sett var lik på,
men den commiten jeg testet var så stor at du sannsynligvis aldri vil
komme borti en slik situasjon selv—normale commits er mye raskere
i 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 (Stor) |
12.480s |
12.500s |
23.002s |
| Commit (Liten) |
0.086s |
0.517s |
1.139s |
| Branch (Kald) |
1.161s |
94.681s |
82.249s |
| Branch (Varm) |
0.070s |
12.300s |
39.411s |
Tallene for kald og varm braching er tall for den første og andre gangen
jeg branchet et arkiv—det andre tallet er da branching med disk
cache.
Det burde noteres at selv om 'add' resultatene er mye tregere, dette
var for en massiv add-operasjon—over 2000 filer. For de fleste
oppgaver folk gjør på en daglig basis, vil add-operasjoner i alle disse
systemene ta mindre enn et sekund. Alle andre operasjoner testet her
(muligens sett bort fra den store commiten) er bedre indikatorer på
hva du sannsynligvis vil gjøre dag til dag.
Disse tallene er ikke vanskelig å gjenskape: klon Django-prosjektet i hvert
av systemene og prøv ut de samme kommandoene i hvert system.
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