Ignore correctamente todos los files recursivamente en una carpeta específica, excepto para un tipo de file específico

He visto preguntas similares ( 1 , 2 y 3 ), pero no obtengo una solución adecuada de ellos.

Necesito ignorar todos los files debajo de una carpeta particular excepto un tipo de file específico. La carpeta es un subdirectory para la ruta raíz. Déjame nombrar la carpeta Resources . Como no quiero complicar las cosas, permítanme ignorar los files debajo de todas las carpetas llamadas Resources donde sea que se encuentre.

Esta es la solución más común (en todas las preguntas duplicadas)

 # Ignore everything * # Don't ignore directories, so we can recurse into them !*/ # Don't ignore .gitignore !.gitignore # Now exclude our type !*.foo 

El problema con esta solución es que deja de rastrear los files recién agregados (ya que * ignora todos los files). No quiero seguir excluyendo todos y cada uno de los types de files. Quiero un comportamiento normal donde, si se agrega un nuevo file, el git status muestra.

Finalmente obtuve una solución aquí . La solución es agregar otro file .gitignore en la carpeta de Resources . Esto funciona correctamente

¿Puedo lograr lo mismo con un file de ignorar? Encuentro que tener muchos files de ignorar en diferentes directorys es un poco torpe.

Esto es lo que bash lograr:

 # Ignore everything under Resources folder, not elsewhere Resources # Don't ignore directories, so we can recurse into them !*Resources/ # Now exclude our type !*.foo 

Pero esto da la salida opuesta. Ignora los types *.foo y rastrea otros files.

@SimonBuchan es correcto.

Desde git 1.8.2, Resources/** !Resources/**/*.foo funciona.

La mejor respuesta es agregar un file de Recursos / .gitignore en Recursos que contienen:

 # Ignore any file in this directory except for this file and *.foo files * !/.gitignore !*.foo 

Si no quiere o no puede agregar ese file .gitignore, existe una solución poco elegante:

 # Ignore any file but *.foo under Resources. Update this if we add deeper directories Resources/* !Resources/*/ !Resources/*.foo Resources/*/* !Resources/*/*/ !Resources/*/*.foo Resources/*/*/* !Resources/*/*/*/ !Resources/*/*/*.foo Resources/*/*/*/* !Resources/*/*/*/*/ !Resources/*/*/*/*.foo 

Deberá editar ese patrón si agrega directorys más profundos de lo especificado.

Esto puede parecer estúpido, pero verifique si todavía no ha agregado la carpeta / files que está tratando de ignorar al índice anterior. Si lo hizo, no importa lo que ponga en su file .gitignore, las carpetas / files seguirán en escena.