¿Por qué git ignora todos los files en un directory excepto uno?

Sé que hay muchas preguntas sobre cómo ignorar directorys, y por lo general no he tenido ningún problema hasta ahora, pero ahora estoy atrapado con algo que no entiendo.

Aquí está mi estructura de directory:

/src /war com.example.MyProject/ WEB-INF/ classes/ deploy/ lib/ 

Quiero ignorar el contenido de las classes/ de directorys classes/ , deploy/ y com.example.MyProject/ , y aquí está mi file .gitignore:

 *.log war/WEB-INF/classes/ war/WEB-INF/deploy/ com.example.MyProject/ 

Los files en com.example.MyProject/ se generan automáticamente, y git los ignora a todos excepto a un file llamado com.example.MyProject.nocache.js . De hecho, cuando hago el git status obtengo:

 # On branch myBranch # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: .gitignore # ...... # modified: war/com.example.MyProject/com.example.MyProject.nocache.js 

¿Por qué git se niega a ignorar ese único file en ese directory? ¿Qué estoy haciendo mal?

Si Git ya está siguiendo un file, agregar el file a .gitignore no .gitignore que Git lo .gitignore . Necesitarás hacer git rm --cached <file> para mantener el file en tu tree y luego ignorarlo

Si el file ya se ha agregado al índice, aún permanecerá ahí, aunque lo agregue al file .gitignore .

Intente eliminar el file del índice git:

 git rm --cached war/com.example.MyProject/com.example.MyProject.nocache.js 

La opción --cached se asegura de que el file permanezca en su carpeta y simplemente se elimine del índice