¿Cómo eliminar archivos que figuran en .gitignore pero que aún están en el repositorio?

Resuelto Intrepidd asked hace 11 años • 13 respuestas

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á?

Intrepidd avatar Nov 24 '12 20:11 Intrepidd
Aceptado

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? :)

Samy Dindane avatar Nov 24 '2012 13:11 Samy Dindane

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 addignorarás los que están en formato .gitignore.

El uso de la --cachedopció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~1antes de impulsar su confirmación.

gtatr avatar Dec 23 '2015 11:12 gtatr

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 -xdnpara realizar un ensayo y ver qué se eliminará.
Luego use git clean -xdfpara ejecutarlo.

Básicamente, git clean -ho 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.

weiz avatar Apr 12 '2016 12:04 weiz