Git je rychlý. Přiznávají to i ti nejzarytější příznivci ostatních nástrojů.
Všechny operace v Gitu se provádějí lokálně a tak má obrovskou výhodu oproti
SVN a Perforce, které vyžadují přístup k síti, aby vůbec fungovaly.
Ale i ve srovnání s ostatními distribuovanými verzovacími nástroji, které
také pracují lokálně, je Git zatraceně rychlý.
Jedním z důvodů pravděpodobně bude to, že Git byl vytvořen pro správu
Linuxového kernelu, takže se musel efektivně vypořádat s velkými
repositáři hned od začátku. Navíc je Git napsán v C, takže má velmi
malou režii oproti programovacím jazykům vyšší úrovně.
A konečně, Git je tak rychlý, protože vývojáři rychlost stanovili
jako jeden z jeho cílů.
Níže jsou zobrazeny výsledky měření, která jsem provedl na třech kopiích
zdrojového kódu frameworku Django ve třech různých verzovacích nástrojích:
Git, Mercurial a Bazaar. Měření jsem prováděl také v SVN, ale věřte mi, je
pomalejší — víceméně se shoduje s čísly Bazaaru, když přičtete
latenci danou připojením k vzdálenému serveru.
Výsledkem je, že cokoliv kromě přidávání nových souborů je v Gitu rychlejší.
(Platí to také pro hodně velké commity, kde byl Mercurial víceméně stejně
rychlý. Commit, na němž jsem testování prováděl, byl ale tak velký,
že pravděpodobně takový nikdy dělat nebudete. Běžné commity jsou
v Gitu mnohem rychlejší.)
|
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 (velký) |
12.480s |
12.500s |
23.002s |
| Commit (malý) |
0.086s |
0.517s |
1.139s |
| Branch (studený start) |
1.161s |
94.681s |
82.249s |
| Branch (teplý start) |
0.070s |
12.300s |
39.411s |
Čísla pro „studený“ a „teplý“ start při vytváření
branches znamenají první a opakovanou operaci — při druhé
operaci již tedy byla branch uložena na disku.
Měl bych dodat, že ačkoliv čísla pro operaci add jsou
u Gitu vysoká, jednalo se o masivní opareci — přes 2 000 souborů.
Pro většinu toho, co každý z nás běžně dělá, zaberou operace
add pouhé zlomky sekund. Všechny ostatní uvedené operace
(možná kromě onoho obrovského commitu) jsou při každodenní práci
daleko častější.
Tato měření si může každý provést snadno sám: prostě jen naklonujte
zdrojového kódy projektu
Django
v různých verzovacích systémech a vyzkoušejte v každém z nich tytéž operace.
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