tutorial - Detener un git gc-agresivo, ¿es algo malo?
git tag name (3)
FWIW, acabo de corromper un repositorio abortando git gc
con CTRL + C. git fsck
ahora muestra los siguientes errores:
error: HEAD: invalid sha1 pointer [...]
error: refs/heads/master does not point to a valid object!
notice: No default references
Y bastantes
dangling commit [...]
No voy a investigar sobre esto, pero me gustaría señalar que voy a evitar abortar git gc
.
Estoy ejecutando un git gc --aggressive
en un repositorio muy grande (apx 100 gb). Ha estado funcionando desde hace dos noches, y desde hace un par de horas, se ha quedado en "Compressing Objects: 99% (76496/76777)"
Si presiono el proceso, ¿cuáles son las consecuencias? ¿Mi repositorio será inutilizable? Mi intuición dice que no, pero me gustaría tener algunas opiniones. ¡Gracias!
Nota: hay una evolución interesante para git 2.0 (Q2 2014) :
La opción "git gc --aggressive" learn "--depth" y la variable de configuración "gc.aggressiveDepth" permiten el uso de una profundidad menos alocada que el valor predeterminado incorporado de 250.
Esto se describe en commit 125f814 , hecho por Nguyễn Thái Ngọc Duy ( pclouds
) :
Cuando 1c192f3 (
gc --aggressive
:gc --aggressive
realmente agresivo - 2007-12-06) hizo que--depth=250
el valor predeterminado, realmente no explica la razón, especialmente las ventajas y desventajas de--depth=250
.Un correo antiguo de Linus a continuación lo explica en detalle.
En pocas palabras,--depth=250
es un protector de disco y un asesino de rendimiento .
No todos están de acuerdo con esa agresividad.
Deja que el usuario lo configure.
Eso podría ayudar a evitar el problema de "congelación" que tiene cuando ejecuta ese comando en repositorios grandes.
Se supone que git siempre está a salvo de interrupciones como esta. Sin embargo, si está preocupado, sugiero Ctrl + Z y luego ejecute git fsck --full
para asegurarse de que el sistema sea consistente.
Hay una serie de variables de git-config que pueden ayudar a que git-gc vaya más rápido. Uso lo siguiente en un repositorio grande en particular, pero hay muchas más opciones para probar al azar (o estudiar cuidadosamente, cualquiera que sea).
git config pack.threads 1
git config pack.deltaCacheSize 1
git config core.packedGitWindowSize 16m
git config core.packedGitLimit 128m
git config pack.windowMemory 512m
Esto solo ayuda si su problema es que se está quedando sin memoria.