Git är snabbt. Alla — till och med de mest inbitna
fansen av de andra systemen — brukar ge Git denna
titel. Med Git sker alla operationer lokalt, vilket ger
en klart snabbare körning än SVN och Perforce som båda
kräver en anslutning till en server för många kommandon.
Men även om man jämför med de andra distribuerade SCM:arna så
är Git ganska snabbt.
Ett skäl till detta är antagligen eftersom Git byggdes för
arbete på Linuxkärnan, vilket innebär att det fanns behov
av att det skulle kunna hantera stora arkiv effektivt redan
från första början. Dessutom är Git skrivet i C, vilket
minskar på allt extra resursanvändande som är associerat med
att ha en applikation skriven i ett mer högnivåspråk. Ett till
skäl till att Git är snabbt är att utvecklarna haft detta som
ett mål med applikationen och därför utvecklat Git för det.
Följande är ett antal mätningar jag gjorde där jag mätte
hastigheten på ett antal operationer i kopior av Django-
arkivet i olika SCM:er, nämligen Git, Mercurial och Bazaar. Jag
provade också med Subversion, och tro mig: Det är långsammast
– ta Bazaars nummer och lägg till nätverksfördröjningar.
Slutresultatet var att för allt utom att lägga till nya filer så
var Git snabbast. (Även riktigt stora incheckningar, som Hg var
lika snabb på, men den incheckning som jag provade var så stor att
du antagligen aldrig kommer att göra en sådan själv –
vanliga incheckningar är mycket snabbare än så i Git)
|
Git |
Hg |
Bzr |
| Init (Skapande) |
0.024s |
0.059s |
0.600s |
| Add (Lägga till) |
8.535s |
0.368s |
2.381s |
| Status |
0.451s |
1.946s |
14.744s |
| Diff (Se förändringar) |
0.543s |
2.189s |
14.248s |
| Tag (Märka) |
0.056s |
1.201s |
1.892s |
| Log (Historik) |
0.711s |
2.650s |
9.055s |
| Commit (Incheckning, stor) |
12.480s |
12.500s |
23.002s |
| Commit (Incheckning, liten) |
0.086s |
0.517s |
1.139s |
| Branch (Skapa gren, kall) |
1.161s |
94.681s |
82.249s |
| Branch (Skapa gren, varm) |
0.070s |
12.300s |
39.411s |
Den varma och kalla förgreningen är de nummer som jag fick
första och andra gången jag gjorde en ny gren – den
andra är med en varm diskcache.
Det bör noteras att de höga siffrorna för att lägga till
filer i arkivet trots allt var mycket stora listor med filer
– över 2 000 av dem. För majoriteten av allt
användande så kommer alla "add" operationer köras på mycket
mindre listor än detta, och då tar hela operationen hundradelar
av en sekund i alla dessa system. Alla andra testade operationer
här är mer representativa för vad dagligt användande går ut på.
Dessa nummer är inte svåra att återskapa, bara klona Django-arkiven
genom de olika systemen och prova samma kommandon i dem alla.
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