gitignore todos los archivos de extensión en el directorio

Resuelto Harry asked hace 12 años • 9 respuestas

¿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.

Harry avatar May 23 '12 09:05 Harry
Aceptado

Parece que la **sintaxis es compatible con gitla versión 1.8.2.1segú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 .gitignorearchivo, 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.

joeyhoer avatar Jan 15 '2014 20:01 joeyhoer

Nunca lo probé, pero sugiere que si git help ignorepones un .gitignorewith , 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.

ptyx avatar May 23 '2012 02:05 ptyx

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 .gitignorearchivo 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/*.jscoincidirá /public/static/foo.jspero no /public/static/foo/bar.js ). Eliminar el interlineado /tampoco funcionará, haciendo coincidir rutas como public/static/foo.jsy foo/public/static/bar.js. 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).

Como sugirió @ptyx, lo que debe hacer es crear el archivo <repo>/public/static/.gitignoree 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/staticdirectorio y sus subdirectorios.

Adam Sharp avatar May 23 '2012 05:05 Adam Sharp