¿Cómo eliminar archivos que figuran en .gitignore pero que aún están en el repositorio?
Tengo algunos archivos en mi repositorio que deberían ignorarse, los agregué al .gitignore pero, por supuesto, no se eliminan de mi repositorio.
Entonces mi pregunta es, ¿existe algún comando o script mágico que use filter-branch que pueda reescribir mi historial y eliminar todos estos archivos fácilmente? ¿O simplemente un comando que creará una confirmación que los eliminará?
Puedes eliminarlos del repositorio manualmente:
git rm --cached file1 file2 dir/file3
O, si tiene muchos archivos:
git rm --cached `git ls-files -i -c --exclude-from=.gitignore`
Pero esto no parece funcionar en Git Bash en Windows. Produce un mensaje de error. Lo siguiente funciona mejor:
git ls-files -i -c --exclude-from=.gitignore | xargs git rm --cached
En PowerShell en Windows, esto funciona aún mejor (maneja espacios en la ruta y los nombres de archivos):
git ls-files -i -c --exclude-from=.gitignore | %{git rm --cached $_}
En cuanto a reescribir todo el historial sin estos archivos, dudo mucho que exista una forma automática de hacerlo.
Y todos sabemos que reescribir la historia es malo, ¿no? :)
Una forma más sencilla que funciona independientemente del sistema operativo es hacer
git rm -r --cached .
git add .
git commit -m "Drop files from .gitignore"
Básicamente, eliminas y vuelves a agregar todos los archivos, pero git add
ignorarás los que están en formato .gitignore
.
El uso de la --cached
opción mantendrá los archivos en su sistema de archivos, por lo que no eliminará archivos de su disco.
Nota: Algunos señalaron en los comentarios que perderás el historial de todos tus archivos. Probé esto con git 2.27.0 en MacOS y no es el caso. Si desea comprobar lo que está sucediendo, verifique git diff HEAD~1
antes de impulsar su confirmación.
Como no se realiza un seguimiento de los archivos en .gitignore , puede utilizar el comando git clean para eliminar de forma recursiva los archivos que no están bajo control de versiones.
Úselo git clean -xdn
para realizar un ensayo y ver qué se eliminará.
Luego use git clean -xdf
para ejecutarlo.
Básicamente, git clean -h
o man git-clean
(en Unix) te dará ayuda.
Tenga en cuenta que este comando también eliminará archivos nuevos que no se encuentren en el área de preparación.