¿Es posible "actualizar" un repositorio git después de actualizar el archivo gitignore?
Acabo de agregar más ignoraciones (?) A mi gitignore y me gustaría eliminar cosas que ya están en el repositorio que coinciden con el nuevo archivo.
¿Es posible "actualizar" un repositorio git después de actualizar el archivo gitignore?
Acabo de agregar más ignoraciones (?) A mi gitignore y me gustaría eliminar cosas que ya están en el repositorio que coinciden con el nuevo archivo.
La solución mencionada en "el archivo .gitignore no ignora " es un poco extrema, pero debería funcionar:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( asegúrese de confirmar primero los cambios que desea conservar , para evitar cualquier incidente como comenta jball037 a continuación .
Sin embargo, la--cached
opción mantendrá sus archivos intactos en su disco).
También tiene otra solución más detallada en la publicación del blog " Hacer que Git ignore los archivos ya rastreados ":
git rm --cached `git ls-files -i --exclude-standard`
Bassim sugiere en su edición :
En caso de que aparezca un mensaje de error como
fatal: path spec '...' did not match any files
, puede haber archivos con espacios en su ruta.Puede eliminar todos los demás archivos con la opción
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
pero los archivos no coincidentes permanecerán en su repositorio y deberán eliminarse explícitamente encerrando su ruta con comillas dobles:
git rm --cached "<path.to.remaining.file>"
Podría malinterpretarlo, pero ¿está tratando de eliminar archivos recientemente ignorados o desea ignorar nuevas modificaciones a estos archivos? En este caso, la cosa está funcionando.
Si desea eliminar archivos ignorados previamente comprometidos, use
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m 'clean' '
Sé que esta es una vieja pregunta, pero la solución de Gracchus no funciona si los nombres de archivo contienen espacios. La solución de VonC para archivar nombres con espacios es no eliminarlos utilizando --ignore-unmatch
, luego eliminarlos manualmente, pero esto no funcionará bien si hay muchos.
Aquí hay una solución que utiliza matrices bash para capturar todos los archivos.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'