
Nate
He creado una lista blanca solo para archivos de texto.
*
!*.txt
Ahora, tengo un archivo de texto sin seguimiento en un subdirectorio: sub/dir/file.txt
, y NO se muestra (se ignora). Sin embargo, se muestran los archivos de texto en el directorio raíz.
¿Por qué es eso y cómo lo soluciono?

simón
Si lo intenta de esa manera, fallará, porque terminará poniendo en la lista negra los directorios de su estructura.
Para resolverlo, desea incluir en la lista negra todo lo que no sea un directorio y no sea uno de los tipos de archivo que desea confirmar, mientras no esté en la lista negra de directorios.
los .gitignore
archivo que hará esto:
# First, ignore everything
*
# Now, whitelist anything that's a directory
!*/
# And all the file types you're interested in.
!*.one
!*.two
!*.etc
Probé esto en una lista blanca de estructura de tres niveles para .txt
archivos en presencia de *.one
, *.two
y *.three
archivos usando un .gitignore
ubicado en el directorio raíz del repositorio, funciona para mí. No tendrás que agregar .gitignore
archivos a todos los directorios de su estructura.
La información que usé para averiguar la respuesta provino, entre otras cosas, de esto (stackoverflow.com).

Sharadh
Una forma más sencilla de lograr esto es:
# Ignore all files...
*.*
# ...except the ones we want
!*.txt
Esto funciona porque gitignore
aplica patrones que no comienzan con /
a todos los niveles por debajo del .gitignore
expediente:
Si hay un separador al principio o en medio (o ambos) del patrón, entonces el patrón es relativo al nivel de directorio del archivo .gitignore en particular. De lo contrario, el patrón también puede coincidir en cualquier nivel por debajo del nivel .gitignore.
Si quisiera hacer esto con los archivos dentro de un directoriolas cosas se vuelven más complejas:
# Ignore all files in all directories inside subdir...
/subdir/**/*.*
# ...except the ones we want
!/subdir/**/*.txt
Esto funciona porque gitignore
tiene reglas especiales para **
:
Dos asteriscos consecutivos (“**
“) en patrones coincidentes con el nombre de ruta completo puede tener un significado especial:
- Una barra inclinada seguida de dos asteriscos consecutivos y luego una barra inclinada coincide con cero o más directorios. Por ejemplo, “
a/**/b
” partidos “a/b
“, “a/x/b
“, “a/x/y/b
” y así.
La pieza clave es asegurarse de no ignorar los directorios, porque entonces todos los archivos dentro de ese directorio se ignoran independientemente de otras reglas.

Alex
Busqué durante mucho tiempo:
-
Supongamos que tengo una estructura de carpetas grande con ~100.000 directorios anidados recursivamente. En esas carpetas hay unos 30.000 archivos de tipo .txt
(en mi caso: tipo *.md
). Junto a estos *.md
archivos, hay, digamos, 500 GB de (más de un millón) de archivos que no quiero rastrear.
-
Quiero que git rastree solo .txt
(o *.md
) archivos en todas las carpetas y subdirectorios.
La respuesta correcta debería ser: esto no es posible en Git.
Lo que hice en su lugar:
[edit: did also not work –
I tried to create a folder with symlinks (or hardlinks) and use git there, but git doesn’t follow symlinks and overwrites hardlinks. Doh!]
Relacionado: stackoverflow.com/q/987142/78845
– Johnsyweb
6 de febrero de 2012 a las 16:09
¿Están los archivos que desea incluir en un subdirectorio? Si es así, este subdirectorio ya podría ser ignorado por la primera estrella en su
.gitignore
.– fajrán
6 de febrero de 2012 a las 16:11
Si. Estos archivos estarán tan abajo en la estructura de directorios como la carpeta 11.1.102.55 en mi ejemplo. El anidamiento no siempre es el mismo entre carpetas/productos.
– Nate
6 de febrero de 2012 a las 17:05
Conozco esta funcionalidad. Tenemos cientos de directorios. Sería más rápido simplemente ignorar explícitamente los tipos de archivo que no queremos que hacer un gitignore para cada directorio. Realmente estoy buscando una manera de sacar la funcionalidad de la lista blanca del archivo .gitignore.
– Nate
6 de febrero de 2012 a las 19:11
No veo cómo esto es un duplicado. La otra pregunta es cómo incluir en la lista blanca ciertos archivos, mientras que esta pregunta cómo incluir en la lista blanca ciertos tipos de archivos, incluidas las subcarpetas. En realidad, es más como un duplicado de stackoverflow.com/questions/8024924/….
– Gran McLargeEnorme
17 de abril de 2013 a las 16:01