gitignore todos los archivos de extensión en el directorio
¿Existe alguna forma de ignorar todos los archivos de un tipo en un directorio?
**
Aparentemente no tiene sentido para git, por lo que esto no funciona:
/public/static/**/*.js
La idea es hacer coincidir carpetas anidadas arbitrarias.
Parece que la **
sintaxis es compatible con git
la versión 1.8.2.1
según la documentación .
Dos asteriscos consecutivos ("
**
") en patrones que coinciden con la ruta completa pueden tener un significado especial:
Un " " inicial
**
seguido de una barra diagonal significa coincidencia en todos los directorios. Por ejemplo, "**/foo
" coincide con el archivo o directorio "foo
" en cualquier lugar, igual que el patrón "foo
". "**/foo/bar
" coincide con el archivo o directorio "bar
" en cualquier lugar que esté directamente debajo del directorio "foo
".Un "
/**
" final coincide con todo lo que hay dentro. Por ejemplo, "abc/**
" coincide con todos los archivos dentro del directorio "abc
", en relación con la ubicación del.gitignore
archivo, con una profundidad infinita.Una barra diagonal seguida de dos asteriscos consecutivos y luego una barra diagonal coincide con cero o más directorios. Por ejemplo, "
a/**/b
" coincide con "a/b
", "a/x/b
", "a/x/y/b
" y así sucesivamente.Otros asteriscos consecutivos se consideran inválidos.
Nunca lo probé, pero sugiere que si git help ignore
pones un .gitignore
with , hará lo que quieras.*.js
/public/static
Nota: asegúrese de consultar también la respuesta de Joeys a continuación: si desea ignorar archivos en un subdirectorio específico, entonces un .gitignore local es la solución correcta (la localidad es buena). Sin embargo, si necesita aplicar el mismo patrón a todo su repositorio, entonces la solución ** es mejor.
ACTUALIZACIÓN: Eche un vistazo a la respuesta de @Joey : Git ahora admite la **
sintaxis en patrones. Ambos enfoques deberían funcionar bien.
La página de manual de gitignore(5) dice:
Los patrones se leen desde un archivo .gitignore en el mismo directorio que la ruta, o en cualquier directorio principal, y los patrones en los archivos de nivel superior (hasta el nivel superior del árbol de trabajo) son anulados por los de los archivos de nivel inferior hasta el directorio. que contiene el archivo.
Lo que esto significa es que los patrones en un .gitignore
archivo en cualquier directorio determinado de su repositorio afectarán ese directorio y todos los subdirectorios .
El patrón que proporcionaste
/public/static/**/*.js
no está del todo bien, en primer lugar porque (como señaló correctamente) **
Git no utiliza la sintaxis. Además, el principio /
ancla ese patrón al inicio del nombre de la ruta. (Por lo tanto, /public/static/*.js
coincidirá /public/static/foo.js
pero no /public/static/foo/bar.js
). Eliminar el interlineado EDITAR: Simplemente eliminar la barra diagonal inicial tampoco funcionará; debido a que el patrón todavía contiene una barra diagonal, Git lo trata como un shell global simple y no recursivo (gracias @Joey Hoer por señalar esto)./
tampoco funcionará, haciendo coincidir rutas como public/static/foo.js
y foo/public/static/bar.js
.
Como sugirió @ptyx, lo que debe hacer es crear el archivo <repo>/public/static/.gitignore
e incluir solo este patrón:
*.js
No hay un encabezado /
, por lo que coincidirá en cualquier parte de la ruta y ese patrón solo se aplicará a los archivos del /public/static
directorio y sus subdirectorios.