Parece que mi proyecto es cada vez más grande con cada git commit/push
. ¿Hay alguna manera de limpiar mi carpeta git?
156
No estoy seguro de lo que quieres. En primer lugar, por supuesto, cada vez que se compromete / empuje el directorio se hará un poco más grande, ya que tiene que almacenar cada uno de esos compromisos adicionales.
Sin embargo, probablemente desee git gc
lo que "limpiará los archivos innecesarios y optimizará el repositorio local" ( página del manual ).
Otro comando posiblemente relevante es el git clean
que eliminará los archivos no rastreados de su árbol ( página del manual ).
WARNING
El comando como se escribió anteriormente por @Kalle eliminará CADA > UNTRACKED <ARCHIVO Y DIRECTORIO DENTRO DE SU RAÍZ GIT , no solo "archivos listados en .gitignore". Cualquier cosa que Git no esté rastreando, independientemente de si está o no en la lista.gitignore
, se eliminará.git clean -dfX
(tenga en cuenta el caso en elX
) solo eliminará los elementos que tengan una regla aplicable.gitignore
. Tenga en cuenta esta advertencia: nunca ejecutegit clean
sin ejecutarlo en modo interactivo, con en-i
lugar de-f
, o al menos haciendo una ejecución en seco primero,-n
y luego nuevamente con-f
.Correr:
Elimina todas las ramas de seguimiento obsoletas que ya se han eliminado
origin
pero que aún están disponibles localmente enremotes/origin
.' G arbage C ollection': ejecuta tareas de limpieza (comprime revisiones, elimina objetos sueltos / inaccesibles). El
--auto
indicador primero determina si se requiere algún trabajo y sale sin hacer nada si no es así.fuente
Un escenario donde su repositorio git obtendrá serio más grande con cada confirmación es una de las que está cometiendo archivos binarios que se genera con regularidad. Su almacenamiento no será tan eficiente como el archivo de texto .
Otro es uno en el que tiene una gran cantidad de archivos dentro de un repositorio (que es un límite de git ) en lugar de varios subrepos ( administrados como submódulos ).
En este artículo sobre git space , AlBlue menciona:
Si tiene grandes binarios almacenados en su repositorio de git, puede considerar:
git filter-branch
(advertencia: esto reescribirá el historial, lo cual es malo si ya ha presionado su repositorio y si otros lo han retirado)Como mencioné en " ¿Cuáles son los límites de archivos en Git (número y tamaño)? ", El más reciente (2015, 5 años después de esta respuesta) Git LFS de GitHub es una forma de administrar esos archivos grandes (almacenándolos fuera del Repositorio de Git).
fuente
si si,
git gc
es la solución, naturalmente,y localmente, simplemente puede eliminar el repositorio local y clonarlo nuevamente,
pero hay algo más importante aquí ...
los segundos que esperas para que ese gran git y externos se procesen se recogen en largos minutos en los que se recogen en horas de tiempo ineficiente,
Cree un nuevo repositorio (completamente, no solo una rama) desde cero , incluida la única versión reciente de archivos, naturalmente perderá todo el historial,
pero cuando en el mundo de los códigos no es hora de ponerse sentimental, no tiene sentido arrastrar los 5 años completos de código en cada commit o diff, aún puede almacenar los viejos git y externos en algún lugar, si siente nostalgia:]
pero, en algún momento, realmente tienes que avanzar:]
¡tu equipo te lo agradecerá!
fuente
Ejecutar este comando es extremadamente peligroso, pero reducirá su repositorio al borrar todos sus archivos de recuperación / copia de seguridad de git:
Borrará todos los archivos que git usa para recuperar su repositorio de algún comando incorrecto, por ejemplo, si lo hizo
git reset --hard
, generalmente puede recuperar los archivos perdidos. Pero si lo hacesgit reset --hard
antes delgit reflog expire...
comando, entonces lo perdiste todo. Ahora, su única esperanza es utilizar alguna herramienta que analice su sistema de archivos e intente recuperar los archivos borrados, si no fueron anulados.fuente
git clean -d -f -i
Es la mejor manera de hacerlo.Esto ayudará a limpiar de una manera más controlada.
-i
significa interactivo.fuente
git clean
no es tanto para limpiar el repositorio como para limpiar el directorio. Para los usuarios que copian / pegan ciegamente, tengan cuidado; Esto elimina los archivos / directorios no rastreados que realmente podría desear localmente.No sé si lo reducirá, pero después de ejecutarlo
git clean
, a menudo también lo hagogit repack -ad
, lo que reduce la cantidad de archivos de paquete.fuente
git gc
proceso, por lo que no es necesario ejecutarlo por separado