Git is snel. Iedereen—zelfs het grootste gedeelte van de hard core
users van andere systemen—geeft Git deze titel. Met Git voer je alle
operaties lokaal uit, wat een voorsprong geeft in vergelijking met SVN en
Perforce, die allebei netwerk toegang nodig hebben voor sommige operaties.
Zelfs in vergelijking met andere DCM's die operaties ook lokaal uitvoeren is
Git nog steeds erg snel.
Een gedeelte hiervan komt waarschijnlijk omdat het is gebouwd om aan de
Linux kernel te werken, wat betekent dat het vanaf dag 1 effectief om moest
kunnen gaan met grote repositories. Hiernaast is Git geschreven in C, wat
ervoor zorgt dat het minder overhead heeft dan runtimes die gebruik maken van
een higher-level taal.
Een andere reden dat Git zo snel is, is omdat de hoofdontwikkelaars dit als
design-doelstelling hadden voor de applicatie.
Wat volgt zijn een aantal benchmarks die ik op drie kopieën van de Django
source code repository heb uitgevoerd in drie verschillende SCM's: Git,
Mercurial en Bazaar. Ik heb ook een gedeelte getest in SVN, maar geloof me,
het is langzamer—kort gezegd, neem de Bazaar uitslag en tel hier de
netwerk latency bij op...
Het eindresultaat kwam er op neer dat behalve het toevoegen van nieuwe
bestanden, Git het snelste was. (Ook hele grote commits, waar Hg ongeveer
hetzelfde in was, maar de commit die ik getest heb was zo groot dat je die
waarschijnlijk nooit iets soortgelijks zal uitvoeren—normale commits
zijn veel sneller 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 (Large) |
12.480s |
12.500s |
23.002s |
Commit (Small) |
0.086s |
0.517s |
1.139s |
Branch (Cold) |
1.161s |
94.681s |
82.249s |
Branch (Hot) |
0.070s |
12.300s |
39.411s |
De Cold en Hot branch cijfers zijn de eerste en tweede keer dat ik een
repository gebranched had—het tweede cijfer is een branch met een
hot disk cache.
Het moet gezegd worden dat desondanks de 'add' cijfers veel langzamer zijn,
deze voor een ontzettend grote add operatie waren—meer dan 2000 bestanden.
Normaal gezien zullen voor mensen die hun normale handelingen uitvoeren add
operaties een fractie van een seconde duren. Alle andere operaties die ik hier
getest heb (behalve misschien die voor de grote commit) geven een beter beeld
van zaken die je daadwerkelijk wel elke dag zal uitvoeren.
Het is niet moeilijk om deze cijfers na te maken, je hoeft alleen maar het Django
project in elk van deze systemen te klonen en voer hierin dezelfde commando's uit.
git clone git://github.com/brosner/django.git dj-git
hg clone hg.dpaste.com/django/trunk dj-hg
bzr branch lp:django dj-bzr
svn checkout code.djangoproject.com/svn/django/trunk dj-svn