Reduce el tamaño del repositorio git

290

Intenté buscar un buen tutorial para reducir el tamaño del repositorio, pero no encontré ninguno. ¿Cómo reduzco el tamaño de mi repositorio? ... son unos 10 MB, pero la cuestión es que Heroku solo permite 50 MB y no estoy cerca de terminar de desarrollar mi aplicación.

Agregué los sospechosos habituales (registro, proveedor, documento, etc.) a .gitignore ya. Aunque solo agregué .gitignore recientemente.

¿Alguna sugerencia?

enviado
fuente
1
Lo acabo de hacer y lo redujo a 2.2 mb ... ¡muchas gracias! Aunque eso no pareció reducir el tamaño del repositorio en Heroku
enviado el
11
Empújalo usando --force. Se sobrescribirá el contenido incluso si no hubo cambios (sin nuevos compromisos, etc.)
Marcin Gil
1
@MarcinGil: a continuación, VonC indica que necesita acceso al servidor para limpiar el servidor remoto (si lo estoy analizando correctamente).
jww
1
Solo un comentario para ayudar a otros lectores si no saben qué agregar al .gitignore, hay un buen servicio en gitignore.io que lo ayudará a configurar un buen en .gitignorefunción de su entorno de desarrollo.
Blairg23

Respuestas:

351

git gc --aggressivees una forma de forzar el proceso de poda (para estar seguro git gc --aggressive --prune=now). También tiene otros comandos para limpiar el repositorio. Sin embargo, no se olvide, ¡a veces git gcsolo puede aumentar el tamaño del repositorio !

También se puede usar después de un filter-branch, para marcar algunos directorios que se eliminarán del historial (con una mayor ganancia de espacio); ver aquí . Pero eso significa que nadie se retira de su repositorio público. filter-branchpuede mantener las referencias de respaldo.git/refs/original , de modo que el directorio también se pueda limpiar.

Finalmente, como se menciona en este comentario y esta pregunta ; limpiar el reflog puede ayudar:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Una solución aún más completa y posiblemente peligrosa es eliminar los objetos no utilizados de un repositorio git

VonC
fuente
En otro escenario, consulte también stackoverflow.com/questions/1029969/…
VonC
1
Nota personal: no olvide las ramas remotas: stackoverflow.com/questions/11255802/…
VonC
1
Nota personal: no olvide las etiquetas remotas
saiyancoder
1
Además de las referencias remotas, el reflog es otra cosa que puede hacer que se mantengan las referencias que está tratando de eliminar. stackoverflow.com/q/27489761/1072626
vossad01
1
@jww Confirmo que esto es puramente una operación local. No tiene relación con el tamaño del repositorio remoto. Necesitaría un acceso directo al servidor de ese repositorio remoto para hacer lo mismo.
VonC
94

Gracias por sus respuestas Esto es lo que hice:

git gc
git gc --aggressive
git prune

Eso parecía haber hecho el truco. Comencé con alrededor de 10.5MB y ahora es poco más de 980KB.

enviado
fuente
8
prunesiempre se ejecuta gc(con el valor predeterminado de hace 2 semanas).
Cas
117
U puede ejecutar los 3 con podar hasta ahora usandogit gc --aggressive --prune=now
rahul286
1
Pero, cuando elimino el repositorio y luego lo clono nuevamente, el tamaño sigue siendo grande. ¿Cómo manejas eso?
cwtuan
2

En mi caso, empujé varios archivos grandes (> 100Mb) y luego procedí a eliminarlos. Pero todavía estaban en la historia de mi repositorio, así que tuve que eliminarlos también.

Lo que hizo el truco fue:

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

Entonces, debes presionar tu rama:

git push origin <your_branch_name> --force

bfg es una herramienta que se puede instalar en Linux y macOS usando brew:

brew install bfg
vinzee
fuente