working not node_modules info files exclude example doesn git version-control directory gitignore subdirectory

git - not - Ignorar correctamente todos los archivos de forma recursiva en una carpeta específica, excepto un tipo de archivo específico



gitignore doesn t ignore folder (4)

Esto puede parecer estúpido, pero verifique si no ha agregado la carpeta / archivos que está tratando de ignorar anteriormente. Si lo hizo, no importa lo que coloque en su archivo .gitignore, las carpetas / archivos aún estarán en escena.

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

Necesito ignorar todos los archivos en una carpeta en particular, excepto un tipo de archivo específico. La carpeta es un subdirectorio de la ruta raíz. Déjame nombrar los Resources la carpeta. Ya que no quiero complicar las cosas, permítame ignorar los archivos en todas las carpetas llamadas Resources donde sea que estén.

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 archivos recién agregados (ya que * ignora todos los archivos). No quiero seguir excluyendo cada tipo de archivo. Quiero un comportamiento normal donde, si se agrega un nuevo archivo, el git status muestra.

Finalmente tengo una solución here . La solución es agregar otro archivo .gitignore en la carpeta Resources . Esto funciona correctamente.

¿Puedo lograr lo mismo con un archivo de ignorar? Me parece que tener muchos archivos ignorados en directorios diferentes es un poco torpe.

Esto es lo que estoy tratando de 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 tipos *.foo y rastrea otros archivos.


La mejor respuesta es agregar un archivo Resources / .gitignore en Resources que contiene:

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

Si no desea o no puede agregar ese archivo .gitignore, hay 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 directorios más profundos de lo especificado.


Lo estoy haciendo mal o la respuesta aceptada ya no funciona con git actual.

De hecho, encontré la solución adecuada y la publiqué en casi la misma pregunta here . Para más detalles dirígete allí.

Solución:

# Ignore everything inside Resources/ directory /Resources/** # Except for subdirectories(won''t be commited anyway if there is no commited file inside) !/Resources/**/ # And except for *.foo files !*.foo