Ignorar archivos que ya han sido confirmados en un repositorio Git [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Ya tengo un repositorio Git inicializado al que agregué un archivo .gitignore. ¿Cómo puedo actualizar el índice de archivos para que se ignoren los archivos que quiero que se ignoren?

Author: dreftymac, 2009-07-16

21 answers

Para desentrañar un archivo único que ya ha sido agregado / inicializado a su repositorio, es decir, , deje de rastrear el archivo pero no lo elimine de su sistema use: git rm --cached filename

Para desentrañar cada archivo que está ahora en su .gitignore:

Primero confirme cualquier cambio de código pendiente, 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 .

Commit it:

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 en otros archivos.

 3707
Author: takeshin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-16 23:48:27

Si está tratando de ignorar los cambios en un archivo que ya está rastreado en el repositorio (por ejemplo, un dev.archivo de propiedades que tendría que cambiar para su entorno local, pero nunca querría comprobar estos cambios) de lo que quiere hacer es:

git update-index --assume-unchanged <file>

Si desea comenzar a rastrear los cambios de nuevo

git update-index --no-assume-unchanged <file>

Véase git-update-index(1) Página de manual.

También eche un vistazo a las opciones skip-worktree y no-skip-worktree para update-index si lo necesita persistir más allá de un git-reset (via)


Actualizar: Dado que la gente ha estado preguntando, aquí hay un alias conveniente (y actualizado desde que se comentó a continuación) para ver qué archivos están actualmente "ignorados" (assume assume-unchanged) en su espacio de trabajo local

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
 529
Author: dyodji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:59

Para desentrañar un archivo que ya ha sido agregado / inicializado a su repositorio, es decir, dejar de rastrear el archivo pero no eliminarlo de su sistema use: git rm --cached filename

 351
Author: pagetribe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-14 23:55:15

Sí - .gitignore el sistema solo ignora los archivos que actualmente no están bajo control de versiones desde git.

Es decir, si ya ha agregado un archivo llamado test.txt usando git-add, entonces agregar test.txt a .gitignore hará que los cambios a test.txt sean rastreados.

Tendrías que git rm test.txt primero y confirmar ese cambio. Solo entonces se ignorarán los cambios a test.txt.

 78
Author: Antony Stubbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-02 17:44:37

Eliminar los espacios en blanco finales .gitignore

También, asegúrese de que no tiene espacios en blanco finales en su .gitignore. Llegué a esta pregunta porque estaba buscando una respuesta, entonces tuve la extraña sensación de que debería abrir el editor en lugar de simplemente cat'ing .gitignore. Se ha eliminado un solo espacio extra del final y poof ahora funciona:)

 50
Author: MikeJansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-02 15:59:49

Seguí estos pasos

git rm -r --cached .
git add .
git reset HEAD

Después de eso, git elimina todos los archivos (*.swp en mi caso) que debería estar ignorando.

 40
Author: Orlando,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-15 07:22:58

Si desea detener el seguimiento del archivo sin eliminar el archivo de su sistema local, que prefiero para 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 confirme los cambios. Y a partir de ahora, cualquier cambio realizado en config/database.yml no será rastreado por git.

$ echo config/database.yml >> .gitignore

Gracias

 37
Author: przbadu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-17 04:01:12

Para eliminar solo unos pocos archivos específicos de ser rastreados:

git update-index --assume-unchanged path/to/file

Si alguna vez quieres empezar a rastrearlo de nuevo:

git update-index --no-assume-unchanged path/to/file                      
 28
Author: Mark Salvatore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-23 15:27:13

Como dice dav_i, para mantener el archivo en repo y aún así eliminarlo de los cambios sin crear una confirmación adicional, puede usar:

git update-index --assume-unchanged filename
 26
Author: Iman Mohamadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-17 07:21:44

Respuestas complejas en todas partes!

Simplemente use lo siguiente

git rm -r --cached .

¡Eliminará los archivos que está tratando de ignorar desde el origen y no desde el maestro en su computadora!

Después de eso solo commit y push!

 26
Author: Ahmad Awais,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-19 05:38:19

No sabiendo exactamente lo que hizo el comando de "respuesta", lo ejecuté, para mi consternación. Elimina recursivamente todos los archivos de tu repositorio git.

Stackoverflow al rescate... Cómo revertir un "git rm-r ."?

git reset HEAD

Hizo el truco, ya que había archivos locales sin confirmar que no quería sobrescribir.

 24
Author: averydev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:43

Hay otra sugerencia tal vez para los chicos lentos como yo =) Poner el .gitignore archivo en su repositorio raíz no en .carpeta git. ¡Salud!

 23
Author: Olga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-27 12:03:53

Ninguna de las respuestas funcionó para mí.

En su lugar:

  1. Mueve el archivo fuera del directorio controlado por git
  2. Compruebe la eliminación en git
  3. Mueve el archivo de nuevo al directorio controlado por git

Después de mover el archivo de nuevo, git lo ignorará.

Funciona con directorios también!

 22
Author: Hunter S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-17 16:23:56

Otro problema que tuve fue que coloqué un comentario en línea.

tmp/*   # ignore my tmp folder (this doesn't work)

Esto funciona

# ignore my tmp folder
tmp/
 20
Author: kindahero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-06 13:14:59

Si los archivos ya están en control de versiones, debe eliminarlos manualmente.

 18
Author: Aragorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-16 19:28:57

Gracias a tu respuesta, he podido escribir este pequeño one-liner para mejorarlo. Lo corrí en mi .gitignore y repo, y no tuvo problemas, pero si alguien ve algún problema evidente, por favor comente. Esto debería git rm -r --cached de .gitignore:

Cat Cat (git rev-parse show show-toplevel)/.gitIgnore / sed "s | / gre / /" / grep-v "^ # | / xargs-L 1-I {} find find (git rev-parse show show-toplevel) - name " {} | / xargs-L 1 git rm-r {cached

Tenga en cuenta que obtendrá una gran cantidad de fatal: pathspec '<pathspec>' did not match any files. Eso es sólo para los archivos que no han sido modificados.

 13
Author: umop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-29 15:00:33

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" era, que el final de línea estaba en formato Mac (\r). Así que después de guardar el archivo con el final de línea correcto (en vi usando :set ff=unix) todo funcionó como un encanto!

 10
Author: Johannes Vetter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-02 09:56:39

Otro problema que no se menciona aquí es si ha creado su .gitignore en el bloc de notas de Windows puede parecer un galimatías en otras plataformas como me enteré. La clave es asegurarse de que la codificación se establece en ANSI en el bloc de notas, (o hacer el archivo en Linux como lo hice).

De mi respuesta aquí: https://stackoverflow.com/a/11451916/406592

 9
Author: Matt Parkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:39

En mi servidor linux server (no true en mi mac dev local), los directorios se ignoran siempre y cuando no agregue un asterisco:

Www/archives / *

No se por qué pero me hizo perder un par de horas, así que quería compartir...

 8
Author: ndemoreau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-15 08:33:19

Una cosa a tener en cuenta si .gitignore no parece estar ignorando archivos no rastreados es que no debe tener comentarios en la misma línea que los ignorados. Así que esto está 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 este último caso como " ignorar archivos llamados "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.", que, por supuesto, no tiene.

 6
Author: Gabriel Perdue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-19 22:52:59

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 realmente desea eliminar archivos del sistema de archivos, no utilice 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

 4
Author: Etherealone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-20 06:18:57