A Git gyors. Mindenki – még más rendszerek megrögzött
követőinek többsége is – általánosan elismeri a Gitnek
ezt a címét. Git esetében minden művelet lokálisan megy végbe,
emiatt előnyt élvez az SVN-nel és Perforce-szal szemben, amely
rendszerek esetében bizonyos műveletekhez hálózati elérés
szükséges. Azonban más elosztott verziókövető rendszerekhez
hasonlítva is a Git meglehetősen gyors.
Ez egyrészt valószínűleg amiatt van így, mert a Linux kernel
kezelésére építették, ami azt jelenti, hogy az első naptól kezdve
hatékonyan kellett kezeljen nagy repository-kat is. Ráadásul
a Gitet C-ben írták, csökkentve ezzel a magasabb színtű
nyelvek futtatókörnyezetének tulajdonított többletköltséget.
Egy másik ok, ami miatt a Git ilyen gyors az, hogy a vezető
fejlesztői ezt az alkalmazás tervezésekor is már célként
tűzték ki.
Az alábbiakban néhány teljesítményteszt eredményei láthatóak,
amelyet a Django keretrendszer forráskódjával végeztem három
különböző verziókövető rendszeren: Git, Mercurial és Bazaar.
Ezek közül néhány dolgot SVN-nel is teszteltem, de higgyétek el,
sokkal lassabb (viszonyításként vegyétek a Bazaar eredményeit,
és adjátok hozzá a hálózat késleltetését).
A végeredmény, hogy az új fájlok hozzáadásán kívül mindenben
a Git volt a leggyorsabb. (Illetve még nagyon nagy commitok
esetében a Hg nagyjából hasonlóan teljesített, de a commit, amit
teszteltem olyan nagy volt, hogy elég valószínűtlen, hogy
valami hasonlót kell majd csinálnod. A normális commitok sokkal
gyorsabbak Gittel.)
|
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 (nagy) |
12.480s |
12.500s |
23.002s |
Commit (kicsi) |
0.086s |
0.517s |
1.139s |
Branch (hideg) |
1.161s |
94.681s |
82.249s |
Branch (meleg) |
0.070s |
12.300s |
39.411s |
A hideg és meleg branch-elő számok a repository első és második
branch-eléséhez tartoznak, ahol a második esetében a branch-elés
friss diszk cache-sel történtek.
Meg kell még jegyezni, hogy bár az 'add' művelet sokkal lassabb,
ez egy masszív 'add' művelet volt (több, mint 2000 fájl).
A legtöbb ember mindennapi munkájának nagy részében az 'add'
művelet mindegyik mért rendszer esetében csak a másodperc
töredékéig tart. Az összes többi mért művelet (talán még a nagy
commitot kivéve) olyan dolgokat vesz figyelembe, amelyekkel
napról napra talákozhatsz.
Ezeket a számokat egyáltalán nem nehéz reprodukálni. Egyszerűen
klónozd le a Django projektet bármelyik rendszerben és próbáld ki
mindegyikben ugyanezeket a parancsokat.
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