2011-04-10 24 views
78

Mi base actual tiene un tamaño total de aprox. 200 MB.cómo reducir la carpeta .git

pero mi carpeta .git tiene un increíble tamaño de 5GB (!). desde que llevo mi trabajo a un servidor externo, no necesito ninguna gran historia local ...

¿cómo puedo reducir la carpeta .git para liberar algo de espacio en mi notebook? ¿Puedo eliminar todos los cambios, que son más antiguos, de 30 días?

muchas gracias por cualquier ayuda :)

+1

Se puede publicar la salida de 'git conde-objetos -V'? –

+0

Posible duplicado de [Reducir el tamaño del repositorio git] (http://stackoverflow.com/questions/2116778/reduce-git-repository-size) – sds

Respuesta

56

no se debe eliminar todos los cambios mayores de 30 días (creo que de alguna manera es posible explotar git, pero realmente no se recomienda).

puede llamar al git gc --aggressive --prune, que realizará la recolección de basura en su repositorio y podará los objetos viejos. ¿tienes muchos archivos binarios (archivos, imágenes, ejecutables) que cambian a menudo? los que normalmente conducen a enormes carpetas .git (recuerde, git almacena instantáneas para cada revisión y los archivos binarios se comprimen mal)

+13

En realidad, 'git gc --aggressive' se considera una mala práctica. Es mejor usar 'git repack -a -d --depth = 250 --window = 250'. – Artefact2

+0

@ artefact2: ¿verdad? git gc call reempaquetar internamente, por lo que no estoy de acuerdo con usted. ¿Tiene un enlace para respaldar su reclamo? – knittl

+0

es un proyecto web con muchas imágenes de php, js, css y, por supuesto :) voy a ejecutar git gc --aggressive --prue – JMW

7

5GB vs 200MB es un poco raro. Intenta ejecutar git gc.

Pero no, a menos que divida su repositorio en módulos, no puede reducir el tamaño del directorio .git.

Cada clon de un git repo es un repositorio completo que puede actuar como servidor. Ese es el principio básico del control de versión distribuida.

3

Estoy usando git más como mecanismo de sincronización que para el historial de versiones. Así que 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 reiniciar las reposiciones. Problema de espacio en disco resuelto. :-) Historia perdida :-( Lo hago porque mi repositorio está en una pequeña llave USB. No quiero o necesito todo mi historial. Si tuviera un método para truncar el historial, lo usaría.

Si estuviera interesado en mantener mi historia me archivar el repositorio actual. en algún momento después pude clonar el repositorio original, copiar todos los cambios de la nueva operación (vamos a suponer que no he hecho mucho (cualquiera) cambiar el nombre o eliminar). Y luego hacer una gran confirmación que representaría todos los cambios realizados en el repositorio nuevo como una única confirmación en el repo viejo . ¿Es posible fusionar las historias? Tal vez si utilicé una rama y luego borré los objetos que no hice necesitar. (No sé lo suficiente sobre Git Internals para empezar a jugar así).

35

De Linus:

El equivalente de "git gc --aggressive" - ​​pero hecho correctamente * * - es hacer algo (por la noche) como

git repack -a -d --depth=250 --window=250 

donde esa cosa profundidad es exactamente qué tan profundas pueden ser las cadenas delta (hacerlas más largas para la historia anterior - vale la pena el espacio por encima), y lo de la ventana es acerca de cuán grande es la ventana de un objeto que queremos que cada candidato delta escanear

Y aquí, es posible que también desee agregar la opción "-f" (que es "LA todos los antiguos deltas", ya que ahora en realidad se está tratando de asegurarse de que éste se encuentra realmente buenos candidatos.

fuente: http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html

+0

Para mí, la carpeta .git es de aproximadamente 1.5G. Intenté esto, pero obtuve un error de seguimiento. 'fatal: Falta memoria, malloc falló (intentó asignar 39763130 bytes)' – Miron

+0

Después de ejecutar 'reenvasar' localmente, haciendo un commit y push, ¿la contracción también se hará remota? – Timo

12

he probado todas estas, pero mi repositorio todavía era muy grande El problema era que había registrado accidentalmente en alguna genera archivos de gran tamaño Después de buscar encontré un gran tutorial que hace que sea fácil de eliminar.. los archivos generados grandes. Este tutorial me permitió reducir mi repositorio de 60 MB a < 1 MB.

http://stevelorek.com/how-to-shrink-a-git-repository.html

+2

Éste ayudó al máximo de todas estas técnicas. ¡Gracias! – Gregory

Cuestiones relacionadas