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 esto NO se muestra (se ignora). Sin embargo, se muestran los archivos de texto en el directorio raíz.
¿Por qué es así y cómo lo soluciono?
.gitignore
.Respuestas:
Si lo intenta de esa manera, fallará, porque terminará en la lista negra de 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 archivos que desea confirmar, mientras que no incluya directorios .
El
.gitignore
archivo que hará esto:Probé esto en una lista blanca de estructura de tres niveles para
.txt
archivos en presencia de*.one
,*.two
y*.three
archivos que usan un.gitignore
ubicado en el directorio raíz del repositorio, funciona para mí. No tendrá que agregar.gitignore
archivos a todos los directorios de su estructura.La información que utilicé para averiguar la respuesta provino, entre otras cosas, de esto (stackoverflow.com).
fuente
!.gitignore
, cuando se usa*
, ¿no es así?/*
para incluir en la lista negra solo la carpeta de nivel superior, pero no todas las carpetas de forma recursiva, lo que en realidad significa.gitignore
que no debe buscar en las subcarpetas de una carpeta de la lista blanca.Una forma más sencilla de lograrlo es:
Esto funciona porque
gitignore
aplica patrones que no comienzan con/
a todos los niveles debajo del.gitignore
archivo:Si quisiera hacer esto con los archivos dentro de un directorio , las cosas se vuelven más complejas:
Esto funciona porque
gitignore
tiene reglas especiales para**
: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.
fuente
Busqué durante mucho tiempo:
Supongamos que tengo una estructura de carpetas grande con ~ 100.000 directorios anidados de forma recursiva. En esas carpetas, hay alrededor de 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 subdirecciones.La respuesta correcta debería ser: esto no es posible en Git.
Lo que hice en su lugar:
[editar: tampoco funcionó - Traté de crear una carpeta con enlaces simbólicos (o enlaces duros) y usar git allí, pero git no sigue los enlaces simbólicos y sobrescribe los enlaces duros. Doh!]
fuente