gitignore no ignora la carpeta

135

En la raíz de mi proyecto tengo una foocarpeta. Dentro de la foocarpeta tengo una barcarpeta. Me gustaría ignorar todos los cambios en todos los archivos dentro de mi barcarpeta. Tengo esto en mi gitignore:

/foo/bar

La carpeta está marcada: existe y tiene que ignorar los archivos. gitignorees committed Sin embargo, tengo un archivo donde hago una moción y está dentro de mi barcarpeta. Cuando escribo

git status

dentro de mi git bashveo el archivo que debería haber sido ignorado. ¿Cuál podría ser la razón y cómo puedo ignorar con éxito todos los archivos dentro de mi carpeta de barras?

Tenga en cuenta que los archivos se ignoraron previamente con la misma línea, pero tuve que eliminar temporalmente esa línea a commitalgo en el servidor. Después del commit, puse de nuevo la línea en el gitignore. Esto fue hace un tiempo, pero ahora he observado que los archivos estarán en git status. Esperaría poder modificar los archivos ignorados sin que aparezcan en el git status.

Lajos Arpad
fuente
En el futuro, no necesita modificar sus ignorados para agregar algo ignorado. git add -f ignored-fileagregará un archivo incluso si está en su ignora.
Chris
¿Qué git status foo/bar/file-that-should-be-ignoredda?
Chris
El archivo que debe ignorarse si se produce algún cambio. Obviamente me falta algo, pero según mi conocimiento, la lista del estado de git debería estar vacía en ese caso, siempre que / foo / bar esté presente en .gitignore
Lajos Arpad
44
Parece que ese archivo en realidad está siendo rastreado por Git. Debe haberse agregado al repositorio en algún momento. Puedes ver su historia con git log foo/bar/file-that-should-be-ignored. Si no debería ser parte del repositorio, debe eliminarlo git rm --cached foo/bar/file-that-should-be-ignoredy luego confirmarlo como sugiere Reck a continuación (aunque lo haría en el archivo, no en toda la carpeta). Esto (a) eliminará el archivo de Git, (b) mantendrá el archivo en su copia local y (c) hará que el archivo se elimine cuando otros fetcho pullel nuevo commit.
Chris
1
Posible duplicado de Ignorar archivos que ya se han
enviado

Respuestas:

341

¿Supongo que esta carpeta ya se ha registrado en git?

Corre git rm -r --cached <folder>y comprueba de nuevo.

Importar
fuente
3
Esto eliminará por completo la carpeta del repositorio (versión actual del). OP quiere que la carpeta esté allí, pero no se deben rastrear nuevos cambios
Gareth
Lamentablemente tengo que eliminar el aceptar. Esta solución eliminó las versiones remotas de los archivos cuando se empujó. Quiero configurar gitignore para ignorar todos los archivos de una carpeta, no para eliminarlo del control remoto. ¿Es eso posible? He revertido la solución.
Lajos Arpad
12
git update-index --assume-unchanged <folder>¿quizás?
Reck
3
@Lajos, ¿no deberías haber solucionado su error en lugar de agregar este confuso comentario de "edición" allí?
cregox
2
@Cawas, ya que este sitio trata sobre el intercambio de conocimientos, la respuesta es: no. Es engañoso aceptar una respuesta que contiene un error. Eso -r no es opcional.
Lajos Arpad
46

Para mí, la respuesta aceptada era parte de la solución, no toda la solución. Tal vez, los otros pasos que estoy a punto de publicar fueron obvios, pero los eché de menos primero. Estos son los pasos que tomé para asegurarme de que mi .gitignorearchivo ignorara la carpeta que quería que ignorara:

  1. Confirma cualquier cambio que necesites arreglar / cambiar.
  2. Ejecute este comando: git rm -r --cached .(que elimina todo del índice de git para actualizar su repositorio de git)
  3. Luego ejecute este comando: git add .(para agregar todo de nuevo al repositorio)
  4. Finalmente, confirme estos cambios usando git commit -m ".gitignore Fixed"

Puede encontrar el enlace al artículo desde donde encontré la solución aquí .

sikanderBabwani
fuente
1
Esta no es una solución viable basada en la pregunta original. @ lagos-arpad preguntó específicamente sobre un subdirectorio y no todo el proyecto. Su solución elimina todo del nivel raíz del repositorio de git y este no es un enfoque recomendado para tratar este problema.
justinhartman
Incluso si es solo un subdirectorio, esta solución funcionó para mí, ya que estaba tratando con un solo archivo. ¿Puedes explicar por qué no se recomienda?
sikanderBabwani
1
Lo que estabas tratando es irrelevante. Esta no es la respuesta a la pregunta y es potencialmente peligrosa como la otra respuesta ha señalado. Esto elimina cosas en el repositorio remoto que no necesariamente quieres.
RichieHH
8

Estaba teniendo este problema y me di cuenta de que git estaba ignorando los archivos / carpetas correctamente, pero mi editor de código (Visual Studio Code) estaba defectuoso y no los "atenuaba" correctamente en la barra lateral de la interfaz de usuario. Reinicié VSCode y estaban atenuados como se esperaba.

Mark Jackson
fuente
Lo mismo aquí: VS Code v1.30.2 (usuario)
xinthose
Lo mismo para mi. ¡Muchas gracias por esta solución! Me preguntaba por qué mi .gitignore no funcionaba hasta que intenté reiniciar VS Code. Estoy en Visual Studio Code v1.44.2.
Fritz Lim
6

Como una adición a la respuesta aceptada

git rm -r --cached /foo/bar/
git status

Cuando hago eso, el terminal muestra un montón de rmarchivos en ese directorio. Entonces, para evitar otra confirmación que podría afectar innecesariamente el control remoto, hice:

git reset HEAD *
git status

Después de eso, no dijo nada que confirmar y cuando modifico los archivos dentro /foo/bar/y hago una, git statussigo recibiendo nothing to commit.

aprender más
fuente
1
Esto solo me devuelve a donde comencé (el problema)
Shonubi Korede