Como dice el título, ¿es posible agregar "archivos sin puntos" al archivo gitignore?
Me imagino que esto se encargaría de todos esos molestos archivos sin extensión.
Como dice el título, ¿es posible agregar "archivos sin puntos" al archivo gitignore?
Me imagino que esto se encargaría de todos esos molestos archivos sin extensión.
Respuestas:
Puede probar una combinación similar a:
*
!/**/
!*.*
Esa gitignore
regla de exclusión (un patrón negado ) debería ignorar todos los archivos, excepto los que tienen una extensión.
Como se menciona más adelante por Mad físico , la regla es:
No es posible volver a incluir un archivo si se excluye un directorio principal de ese archivo. (*
)
(*
: a menos que se cumplan ciertas condiciones en git 2.?+, ver más abajo)
Por eso !/**/
es importante (hacer una lista blanca de las carpetas principales de forma recursiva) si queremos hacer una lista blanca de los archivos.
Mencioné esa misma regla en casos similares como:
Como comenta Jakub Narębski , es posible que no desee ignorar todos los archivos sin extensión.
Mi consejo:
.gitignore
como se muestra arriba: los archivos ya versionados no serán ignorados (incluso si no tienen una extensión). Todos los demás serán ignorados.Para cualquier archivo sin extensión futuro que desee versionar:
git add -f -- myFile
Tenga en cuenta que con git 2.9.x / 2.10 (¿mediados de 2016?), Podría ser posible volver a incluir un archivo si se excluye un directorio principal de ese archivo si no hay comodines en la ruta que se vuelve a incluir .
Nguyễn Thái Ngọc Duy ( pclouds
) está intentando agregar esta función:
Sin embargo, dado que una de las reglas para la reincorporación fue:
La parte del directorio en las reglas de reincorporación debe ser literal (es decir, sin comodines)
De todos modos, esto no habría funcionado aquí.
.gitignore
sería **
y !**.*
. Sé que esto no hace una diferencia si el asterisco se coloca al frente, pero es más explícito y sólido con la forma en que los proyectiles manejan los comodines ...
!Makefile
. Tenga en cuenta que tuve problemas con esta solución en Git 1.7.1 mientras funcionaba bien en 1.9.0. En mi caso, agregar un archivo en el directorio raíz funcionó bien, pero agregar un archivo con una extensión dentro de un subdirectorio se mostró como ignorado. Esto parece deberse a que 1.7.1 aún no era compatible con el **
patrón, ¡mira aquí !
**
fue agregado en Git 1.8.2
. ¿Existe alguna desventaja sobre el uso en !*/
lugar de !/**/
?
*
!*/
!*.*
*
le dice a git que ignore todo.
!*/
luego deja de ignorar todo lo que sea un directorio. Esto es crucial.
!*.*
deja de ignorar todos los archivos con una extensión.
Sin la !*/
regla, los directorios sin un .
nombre no se incluirían en la lista y ninguno de los archivos deseados se agregaría fuera de la carpeta raíz.
Como referencia, lea estas dos secciones en la documentación .gitignore que se destacan:
Un prefijo opcional "!" que niega el patrón; cualquier archivo coincidente excluido por un patrón anterior se incluirá nuevamente. No es posible volver a incluir un archivo si se excluye un directorio principal de ese archivo. Git no enumera los directorios excluidos por razones de rendimiento, por lo que los patrones en los archivos contenidos no tienen ningún efecto, sin importar dónde estén definidos. Coloque una barra invertida ("\") delante del primer "!" para patrones que comienzan con un "!" literal, por ejemplo, "! important! .txt".
Si el patrón termina con una barra, se elimina con el propósito de la siguiente descripción, pero solo encontrará una coincidencia con un directorio. En otras palabras, foo / coincidirá con un directorio foo y las rutas debajo de él, pero no coincidirá con un archivo normal o un enlace simbólico foo (esto es consistente con la forma en que pathpec funciona en general en Git).
En mis carpetas hay muchos archivos con *.c, *.h, *.txt, *.csv
extensiones, etc. y archivos binarios sin ninguna extensión. Así que necesitaba ignorar todos los archivos excepto *.c,*.h
y .gitignore
, así que esto funciona para mí, del .gitignore
ejemplo:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README
,LICENSE
oCOPYING
,INSTALL
,Makefile
etc., aunque siempre se puede forzar-añaden ellos y luego se realiza un seguimiento