repositorio - ignorar cambios git
Ignorar los archivos que ya se han confirmado en un repositorio Git (21)
Esta pregunta ya tiene una respuesta aquí:
Tengo un repositorio Git ya inicializado al que agregué un archivo .gitignore
. ¿Cómo puedo actualizar el índice de archivos para que se ignoren los archivos que quiero ignorar?
¡Respuestas complejas por todas partes!
Solo usa lo siguiente
git rm -r --cached .
¡Eliminará los archivos que intenta ignorar desde el origen y no desde el maestro en su computadora!
Después de eso solo comete y empuja!
Como dice dav_i, para poder mantener el archivo en repo y aún eliminarlo de los cambios sin crear un compromiso adicional, puede usar:
git update-index --assume-unchanged filename
En mi servidor Linux (no es cierto en mi servidor de desarrollo local), los directorios se ignoran siempre y cuando no agregue un asterisco:
www / archivos / *
No sé por qué, pero me hizo perder un par de horas, así que quería compartir ...
Gracias a su respuesta, pude escribir esta pequeña frase para mejorarla. Lo ejecuté en mi .gitignore y repo, y no tuve problemas, pero si alguien ve algún problema evidente, por favor comente. Esto debería ser git rm -r --cached
desde .gitignore
:
cat $ (git rev-parse --show-toplevel) /. gitIgnore | sed "s // $ //" | grep -v "^ #" | xargs -L 1 -I {} encontrar $ (git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached
Tenga en cuenta que obtendrá un montón de fatal: pathspec ''<pathspec>'' did not match any files
. Eso es solo para los archivos que no han sido modificados.
Hay otra sugerencia tal vez para los chicos lentos como yo =) Ponga el archivo .gitignore en la raíz de su repositorio, no en la carpeta .git . ¡Aclamaciones!
He encontrado un problema extraño con .gitignore. Todo estaba en su lugar y parecía correcto. La única razón por la que mi .gitignore fue "ignorado" fue que el final de línea estaba en formato Mac (/ r). Entonces, después de guardar el archivo con el final de línea correcto (en vi usando: set ff = unix) ¡todo funcionó a la perfección!
Ninguna de las respuestas funcionó para mí.
En lugar:
- Mueve el archivo fuera del directorio controlado por git
- Compruebe la eliminación en git
- Mueve el archivo de nuevo al directorio controlado por git
Después de mover el archivo hacia atrás, git lo ignorará.
¡Trabaja con directorios también!
Otro problema que no se menciona aquí es que si ha creado su .gitignore en el bloc de notas de Windows, puede parecer una tontería en otras plataformas, tal como lo descubrí. La clave es asegurarse de que la codificación esté configurada en ANSI en el bloc de notas (o hacer el archivo en Linux como lo hice).
De mi respuesta aquí: https://.com/a/11451916/406592
Otro problema que tuve fue que puse un comentario en línea.
tmp/* # ignore my tmp folder (this doesn''t work)
esto funciona
# ignore my tmp folder
tmp/
Para deshacer el seguimiento de un archivo que ya se ha agregado / inicializado en su repositorio, es decir, deje de rastrear el archivo pero no lo elimine de su uso del sistema: git rm --cached filename
Para eliminar el seguimiento de un solo archivo que ya se ha agregado / inicializado en su repositorio, es decir , deje de rastrear el archivo pero no lo elimine de su uso del sistema: git rm --cached filename
Para deshacer el seguimiento de todos los archivos que están ahora en tu .gitignore
:
Primero confirme los cambios de código pendientes y luego ejecute este comando:
git rm -r --cached .
Esto elimina cualquier archivo modificado del índice (área de preparación), luego simplemente ejecute:
git add .
Comprometelo
git commit -m ".gitignore is now working"
Para deshacer git rm --cached filename
, use git add filename
.
Asegúrese de confirmar todos sus cambios importantes antes de ejecutar
git add .
De lo contrario, perderá cualquier cambio a otros archivos.
Para eliminar solo unos pocos archivos específicos de ser rastreados:
git update-index --assume-unchanged path/to/file
Si alguna vez quieres comenzar a rastrearlo de nuevo:
git update-index --no-assume-unchanged path/to/file
Sí: el sistema .gitignore
solo ignora los archivos que no están actualmente bajo el control de versiones de git.
Es decir, si ya ha agregado un archivo llamado test.txt
usando git-add
, entonces agregar test.txt
a .gitignore
seguirá causando que se test.txt
un seguimiento de los cambios en test.txt
.
Tendrías que git rm test.txt
primero y confirmar ese cambio. Solo entonces se test.txt
cambios a test.txt
.
Si desea detener el archivo de seguimiento sin eliminar el archivo de su sistema local, prefiero ignorar el archivo config/database.yml
. Simplemente intente
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
ahora, agregue este archivo al archivo .gitignore
y .gitignore
los cambios. Y de ahora en adelante, git no rastreará ningún cambio realizado en config / database.yml.
$ echo config/database.yml >> .gitignore
Gracias
Si está tratando de ignorar los cambios en un archivo que ya está siendo rastreado en el repositorio (por ejemplo, un archivo dev.properties que tendría que cambiar para su entorno local pero nunca querría verificar estos cambios) que lo que desea hacer es:
git update-index --assume-unchanged <file>
Si quieres empezar a rastrear cambios de nuevo.
git update-index --no-assume-unchanged <file>
Ver git-update-index (1) Página de manual .
También eche un vistazo a las skip-worktree
y no-skip-worktree
para el índice de actualización si necesita que esto persista después de un reinicio de git ( via )
Actualización: dado que la gente ha estado preguntando, aquí hay un alias conveniente (y actualizado como se comenta a continuación) para ver qué archivos están actualmente "ignorados" (--asumir sin cambiar) en su área de trabajo local
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
Si los archivos ya están en el control de versiones, debe eliminarlos manualmente.
Si necesita dejar de rastrear muchos archivos ignorados, puede combinar algunos comandos:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
Esto dejaría de rastrear los archivos ignorados. Si desea eliminar archivos del sistema de archivos, no use la opción --cached
. También puede especificar una carpeta para limitar la búsqueda, como:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm
Sin saber muy bien lo que hizo el comando de "respuesta", lo ejecuté, para mi consternación. Elimina recursivamente todos los archivos de tu repositorio git.
al rescate ... ¿Cómo revertir un "git rm -r."?
git reset HEAD
Hizo el truco, ya que tenía archivos locales no comprometidos que no quería sobrescribir.
Una cosa que también debe tenerse en cuenta si .gitignore
no parece ignorar los archivos sin seguimiento es que no debe tener comentarios en la misma línea que los ignorados. Asi que esto esta bien
# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*
Pero esto no funcionará:
foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.
.gitignore
interpreta el último caso como "ignorar archivos con el nombre "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc."
, que, por supuesto, no tiene.
seguí estos pasos
git rm -r --cached .
git add .
git reset HEAD
después de eso, git borra todos los archivos (* .swp en mi caso) que deberían ignorarse.
Eliminar espacios en blanco al final en .gitignore
Además, asegúrese de que no haya espacios en blanco al final en su .gitignore. Llegué a esta pregunta porque estaba buscando una respuesta, luego tuve la extraña sensación de que debería abrir el editor en lugar de solo "cat''ing" .gitignore. Se eliminó un solo espacio adicional del final y ahora funciona :)