Manejo de grandes repositorios en GIT

git.jpg
Solucionex
08
Jul 16

Es un problema común que algunos repositorios crezcan en tamaño después de mucho tiempo trabajando en ellos.

Hay principalmente dos razones que hacen que un repositorio GIT crezca masivamente:

  • Acumulación con el tiempo de un largo historial.

  • Inclusión de ficheros binarios de gran tamaño.

Por lo que un repositorio puede crecer debido al aumento de la carpeta de trabajo y a su historial acumulado, que encima puede agravarse si el repositorio contiene versiones con ficheros que están en desuso.

La idea de este artículo es comentaros dos comandos muy útiles para poder trabajar con grandes repositorios sin necesidad de manejar todo el repositorio.

Clonar sin profundidad:

Un clonado sin profundidad, te permite clonar un repositorio manteniendo sólo las últimas confirmaciones del historial.

git clone --depth [num confirmaciones] [url repositorio] [carpeta destino]
git clone --depth 1 https://github.com/javiernuber/appgram.git prueba

Clonar solo una rama:

Desde Git 1.7.10, es posible limitar el historial mediante la clonación de una sola rama:

git clone --depth [num confirmaciones] [url repositorio] --branch [rama remota] --single-branch [carpeta destino]
git clone --depth 1 https://github.com/javiernuber/appgram.git --branch master --single-branch prueba

 

Veamos un ejemplo de que pasaría si ejecutamos los comandos anteriores con el repositorio oficial de Symfony

Clonado normal:

$ git clone https://github.com/symfony/symfony.git symfony
Cloning into 'symfony'...
remote: Counting objects: 329770, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 329770 (delta 1), reused 1 (delta 1), pack-reused 329766
Receiving objects: 100% (329770/329770), 72.03 MiB | 2.23 MiB/s, done.
Resolving deltas: 100% (212113/212113), done.
Checking connectivity... done.

 

Clonar sin profundidad:

 

$ git clone --depth 1 https://github.com/symfony/symfony.git prueba
Cloning into 'prueba'...
remote: Counting objects: 6129, done.
remote: Compressing objects: 100% (5252/5252), done.
remote: Total 6129 (delta 1700), reused 2984 (delta 523), pack-reused 0
Receiving objects: 100% (6129/6129), 4.84 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (1700/1700), done.
Checking connectivity... done.

Clonar solo una rama:

$ git clone --depth 1 https://github.com/symfony/symfony.git --branch 2.0 --single-branch prueba
Cloning into 'prueba'...
remote: Counting objects: 3329, done.
remote: Compressing objects: 100% (2858/2858), done.
remote: Total 3329 (delta 879), reused 1390 (delta 297), pack-reused 0
Receiving objects: 100% (3329/3329), 3.12 MiB | 1.06 MiB/s, done.
Resolving deltas: 100% (879/879), done.
Checking connectivity... done.

Si os fijais en el número de MiB descargados, podéis comprobar que con el clonado normal se descargan 72.03 MiB, con el clonado sin profundidad 4.84 MiB y con el clonado sin profundidad de la rama 2.0 nos descargamos 3.12 MiB.

Como veis es un forma muy sencilla de clonar un repositorio con solo la parte del repositorio que necesitamos, ahorrando espacio y tiempo de descarga.

Espero que os sirva de ayuda :)