Mi base actual tiene un tamaño total de aprox. 200MB.
Pero mi carpeta .git tiene un increíble tamaño de 5GB (!). Como llevo mi trabajo a un servidor externo, no necesito un gran historial local ...
¿Cómo puedo reducir la carpeta .git para liberar espacio en mi cuaderno? ¿Puedo eliminar todos los cambios que tienen más de 30 días?
Muchas gracias por cualquier ayuda :)
git count-objects -v
?Respuestas:
no debe eliminar todos los cambios anteriores a 30 días (creo que de alguna manera es posible explotar git, pero realmente no se recomienda).
puede llamar
git gc --aggressive --prune
, que realizará la recolección de basura en su repositorio y podará los objetos viejos. ¿tiene muchos archivos binarios (archivos, imágenes, ejecutables) que cambian con frecuencia? generalmente llevan a enormes carpetas .git (recuerde, git almacena instantáneas para cada revisión y los archivos binarios se comprimen mal)fuente
git gc --aggressive
se considera una mala práctica. Es mejor usarlogit repack -a -d --depth=250 --window=250
.git gc --aggressive
llama a reempaquetar con un tamaño de ventana de 250 (cf. página de manual) y una profundidad de 250 (cf. código fuente). --aggressive además agrega el-f
interruptor, para tirar y rehacer todas las operaciones delta anteriores (como también se menciona en el enlace)git gc --aggressive --prune
redujo esto a 19 MB.--prune
tampoco es necesario ya que se convirtió en el valor predeterminado desde entoncesv1.5.5-rc0
(commit 25ee973 , marzo de 2008).Esto es lo que el creador de git Linus tiene que decir sobre cómo reducir su repositorio de git:
fuente: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html
¿Esto eliminará los datos binarios que quedan huérfanos en mi repositorio? "git repack" no eliminará imágenes o datos binarios que haya registrado en su repositorio y luego lo haya eliminado. Para eliminar ese tipo de datos permanentemente de su repositorio, debe volver a escribir su historial. Un ejemplo común de eso es cuando accidentalmente ingresas tus contraseñas en git. Puede regresar y eliminar algunos archivos, pero luego tiene que volver a escribir su historial desde entonces hasta ahora y luego forzar el envío y luego el nuevo repositorio a su origen.
fuente
fatal: Out of memory, malloc failed (tried to allocate 39763130 bytes)
repack
localmente, haciendo un commit y push, ¿el encogimiento se hará remoto también?Probé estos, pero mi repositorio todavía era muy grande. El problema era que accidentalmente había registrado algunos archivos grandes generados. Después de algunas búsquedas, encontré un gran tutorial que facilita la eliminación de los archivos generados de gran tamaño. Este tutorial me permitió reducir mi repositorio de 60 MB a <1 MB.
fuente
5GB vs 200MB es un poco raro. Intenta correr
git gc
.Pero no, a menos que divida su repositorio en módulos, no puede disminuir el tamaño del
.git
directorio.Cada clon de un repositorio de git es un repositorio completo que puede actuar como un servidor. Ese es el principio básico del control de versiones distribuido.
fuente
Estoy usando git más como mecanismo de sincronización que para el historial de versiones. Entonces, mi solución a este problema ha sido asegurarme de que tengo todas mis fuentes actuales en un estado satisfactorio, y luego simplemente eliminar .git y reinicializar los repositorios. Problema de espacio en disco resuelto. :-) Historial desaparecido :-( Hago esto porque mi repositorio está en una pequeña memoria USB. No quiero o necesito todo mi historial. Si tuviera un método para simplemente truncar el historial, lo usaría.
Si estuviera interesado en mantener mi historial, archivaría el repositorio actual. En algún momento más tarde podría clonar el repositorio original, copiar todos los cambios del nuevo repositorio (supongamos que no he cambiado mucho (ninguno) el cambio de nombre o la eliminación). Y luego haga una gran confirmación que represente todos los cambios realizados en el nuevo repositorio como una confirmación única en el antiguo repositorio. ¿Es posible fusionar las historias? Tal vez si usé una rama y luego eliminé los objetos que no necesitaba. (No sé lo suficiente sobre git internos para comenzar a perder el tiempo de esa manera).
fuente
Probé los métodos anteriores, nada funcionó en mi caso (donde accidentalmente eliminé el proceso de git durante git push), así que finalmente tuve que eliminar el repositorio y clonarlo nuevamente y ahora la carpeta .git es de tamaño normal.
fuente