Git ist schnell. Jeder, selbst Hardcore-Benutzer anderer SCMs,
geben generell Git diesen Titel. Verglichen mit SVN und Perforce
ist Git so schnell weil beinahe alle Operationen lokal passieren.
Aber selbst verglichen mit anderen verteilten SCMs ist Git ziemlich schnell.
Ein Grund dafür ist, dass Git dazu gebaut wurde um am Linux-Kernel zu
arbeiten, wodurch es von Beginn an effektiv mit grossen
Repositories umgehen musste.
Ein anderer Grund ist, dass Git in C geschrieben ist und noch
ein weiterer Grund ist, dass die primären Entwickler Effizienz zu
einem Designziel der Applikation gemacht haben.
Im folgenden sind ein paar Benchmarks die ich mit drei Kopien
des Django Sourcecodes in 3 verschiedenen SCMs gemacht habe:
Git, Mercurial und Bazaar. Ich hab einiges von dem auch in SVN
getestet, aber glaub mir, es ist langsamer — nimm die Zahlen von
Bazaar und füge Netzwerklatenz hinzu...
Das Endresultat war, dass Git in allem ausser dem Hinzufügen von neuen
Dateien am schnellsten war (Mercurial liegt bei sehr grossen Commits
gleichauf, aber der Commit mit dem ich getestet habe war so gross dass
es unwahrscheinlich ist dass du jemals etwas ähnlich grosses
comitten wirst — normale Commits sind viel schneller 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 |
Die kalten und warmen Branching-Werte sind die Zahlen für das
erste und das zweite erstellen eines neuen Branches -
die zweite Zahl ist ein neuer Branch mit einem warmen
Festplatten-Cache.
Es sollte angemerkt werden, dass, obwohl die 'add'-Werte um einiges
langsamer sind, dies für eine wirklich massive 'add'-Operation
war — über 2000 Dateien. Für den Großteil von dem was die meisten Leute
täglich machen werden sind 'add'-Operationen in allen diesen Systemen
innerhalb eines Bruchteils einer Sekunde erledigt. Alle anderen
Operationen die hier getestet wurden (ausser dem grossen Commit
vielleicht) sind ein Hinweis auf die Dinge die man vielleicht
auch täglich macht.
Die Zahlen sind nicht wirklich schwer zu reproduzieren: einfach das Django-Projekt
in jedem dieser Systeme klonen und die gleichen Kommandos in jedem ausprobieren.
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