Git es rápido. Todo el mundo, hasta los más acérrimos usuarios del
resto de sistemas lo reconoce. Esto se debe, comparado con SVN y
Perforce, a que todas las operaciones se hacen localmente. Sin
embargo cuando se compara con otros SCVs distribuidos, Git también
es veloz.
Es posible que esto se deba en buena parte a que fue construido
para trabajar en el kernel de Linux, lo que quiere decir que desde
el primer día ha tenido que mover de manera efectiva repositorios
de gran tamaño. Otra razón es que Git está escrito en C, y otra
razón más es que, en mi experiencia, los desarrolladores
principales de Git están muy preocupados por la velocidad.
A continuación veremos algunas pruebas que realicé en tres copias
del código fuente de django en 3 sistemas diferentes: Git,
Mercurial y Bazaar. También hice alguna prueba con SVN, pero
creedme cuando os digo que es más lento - básicamente es añadirle
la latencia de red a los números de Bazaar.
El resultado final es que para todo menos para añadir nuevos
archivos, Git es el más rápido (también commits muy grandes,
empatado con Git, pero la entrega que hice era tan grande que es
bastante raro que alguna vez tengas que hacer algo parecido - los
commits normales son mucho más rápidos en Git)
|
Git |
Hg |
Bzr |
| Inicialización |
0.024s |
0.059s |
0.600s |
| Añadir |
8.535s |
0.368s |
2.381s |
| Status |
0.451s |
1.946s |
14.744s |
| Diff |
0.543s |
2.189s |
14.248s |
| Etiquetar |
0.056s |
1.201s |
1.892s |
| Log |
0.711s |
2.650s |
9.055s |
| Entrega (Grande) |
12.480s |
12.500s |
23.002s |
| Entrega (Pequeña) |
0.086s |
0.517s |
1.139s |
| Rama (en frío) |
1.161s |
94.681s |
82.249s |
| Rama (en caliente) |
0.070s |
12.300s |
39.411s |
Los tiempos de creación de rama en frío y en caliente se
corresponden, respectivamente, con el tiempo empleado en la
primera y segunda vez que bifurqué el repositorio - de forma que
en el segundo caso la rama se hizo con la caché del disco
caliente.
Nótese que aunque los números para el añadido de ficheros son
mucho más elntos, se trataba de una operación masiva (más de 2000
archivos) Para lo que la mayor parte de la gente hace, el añadir
cosas al repositorio sólo lleva una fracción de segundo. El resto
de operaciones es bastante más indicativo de las cosas que uno
realmente termina haciendo en el día a día.
No es nada difícil volver a generar estas medidas. Simplemente
clona el proyecto Django en cada uno de los sistemas e intenta
ejecutar los mismos comandos en cada uno
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