Git 很快。大家都這麼說(shuō),甚至那些其他系統(tǒng)的死忠支持者也都會(huì)給予 Git 這個(gè)評(píng)價(jià)。 使用Git,所有的操作都是在本地端的特性讓它比 SVN 與 Perforce 跑得快許多,它們兩個(gè)都需要網(wǎng)路連線才能完成大部分操作。然而,就算是與其他也是在本地端操作的 DSCM 比較,Git 還是快非常多。
一部分的原因可能是因?yàn)樗墙?lái)用在 Linux 核心上的,這表示它從一開(kāi)始就必須有效率的處理非常大的倉(cāng)儲(chǔ)。此外,因?yàn)?Git 是用 C 寫(xiě)的,減少了使用其他高階語(yǔ)言在執(zhí)行期的開(kāi)銷(xiāo)。 另外一個(gè) Git這麼快地原因是因?yàn)樗闹饕_(kāi)發(fā)者們將這個(gè)列為設(shè)計(jì)的目標(biāo)。
底下是一些我測(cè)試的數(shù)據(jù),使用 Django 的原始碼倉(cāng)儲(chǔ)與三種不同的 SCM: Git, Mercurial和 Bazaar。 我也用 SVN 測(cè)試了一些同樣的項(xiàng)目,不過(guò)相信我,它慢更多 — 基本上是 Bazaar 的數(shù)字再加上網(wǎng)路的延遲...
測(cè)試的結(jié)果是所有操作,除了加新檔案之外都是 Git 最快。 (還有大量的提交操作,Hg基本上一樣快,可是我測(cè)試的提交量是如此之大,你平常不太可能有同樣的的量 — 正常的提交操作在 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 |
Cold 和 Hot 分支數(shù)字是我第一次和第二次分支一個(gè)倉(cāng)儲(chǔ) — 第二次分支的數(shù)據(jù)有使用磁碟快取。
要特別注意的是雖然 'add' 操作的速度慢很多,但這是在大量的檔案 — 超過(guò) 2000 個(gè) —上進(jìn)行新增操作 。 對(duì)於大部分人日常使用來(lái)說(shuō),在任何系統(tǒng)上新增操作都只會(huì)用到幾分之一秒而已。 其他測(cè)試到的操作 (除了大量提交...大概)應(yīng)該與你日常用到的差不多。
這些數(shù)字不會(huì)很難重現(xiàn),只要用不同的系統(tǒng) clone 一份 Django 計(jì)劃然後試試這些指令就可以了。
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