¿Cómo puedo ignorar todo lo que hay debajo de una carpeta en Mercurial?


149

Estoy buscando una expresión para el archivo .hgignore, para ignorar todos los archivos debajo de una carpeta especificada.

Por ejemplo: me gustaría ignorar todos los archivos y carpetas debajo de bin

En realidad, cualquier consejo sobre cómo se forman las expresiones sería genial

Respuestas:


173

Alternativamente:

syntax: glob
bin/**

esto es mucho más fácil, creo :)
Xian

PhiLho, creo que eso también filtraría los archivos llamados bin
Peter Gibson

1
Esta respuesta, más esta documentación me ayudó: selenic.com/mercurial/hgignore.5.html
CenterOrbit

77
bin bin/ bin/* bin/**- Todos hacen lo mismo con glob, es decir, ignoran todos los directorios y subdirectorios llamados bin pero no cualquier nombre de archivo bin.txt o bin1. ¿Cuál es el punto de Astérix?
usuario

Me gusta como claridad, pero ciertamente uso 'bin' si has internalizado las reglas globales (soy una reespecie de hombre)
Ry4an Brase

53

Hice algunos experimentos y descubrí que la sintaxis de expresiones regulares en Windows se aplica a la ruta que comienza con el repositorio actual, con barras invertidas transformadas en barras diagonales.

Entonces, si su repositorio está en E: \ Dev, por ejemplo, hg statusaplicará los patrones contra foo / bar / file1.c y tal. Las anclas se aplican a este camino.

Entonces:

  • Glob se aplica a elementos de ruta y está enraizado a partes de elementos
  • foo coincide con cualquier carpeta (o archivo) llamada foo (no "foobar" ni "barfoo")
  • * foo * coincide con cualquier carpeta o archivo con "foo" en el nombre
  • foo / bar * coincide con todos los archivos en la carpeta "foo" que comienzan con "bar"


  • Regex distingue entre mayúsculas y minúsculas, no está anclado
  • Por supuesto, la barra invertida regex caracteres especiales como. (punto)
  • / coincidencias \ separador de ruta en Windows. \ no coincide con este separador ...
  • foo coincide con todos los archivos y carpetas con "foo" dentro
  • foo / coincide solo con carpetas que terminan en "foo"
  • / foo / coincide con la carpeta "foo" en algún lugar de la ruta
  • / foo / bar / coincide con la carpeta "bar" en la carpeta "foo" en algún lugar de la ruta
  • ^ foo coincide con el archivo o carpeta comenzando por foo en la raíz del repositorio
  • foo $ coincide con el archivo que termina con foo

Espero que esto ayude, la página de HGIGNORE (5) me pareció un poco sucinta.


Tengo el patrón '' [Dd] ebug * / '' en uso y lo extraño es que también filtra archivos como '' debug.txt ''
Mehrdad Mirreza

9

Ambos también filtrarán un directorio llamado cabin, que podría no ser lo que desea. Si está filtrando el nivel superior, puede usar:

^/bin/

Para bindirectorios debajo de su raíz, puede omitir el ^. No es necesario especificar la sintaxis, regexp es el valor predeterminado.


44
Esto no ignorará nada. El símbolo de intercalación solo dice cosas en la raíz del repositorio, pero la barra diagonal principal captura solo directorios que no están en la raíz del repositorio.
Ry4an Brase el

2

No importa, lo tengo

syntax: regexp
bin\\*

las expresiones siguen la sintaxis de expresión regular perl estándar.


2
De hecho, y su expresión significa "archivo o carpeta que termina con bin y seguido de 0 o más barras invertidas" ... Entonces funciona porque la barra invertida está anulada por el *, pero aplica cualquier cosa con "bin" dentro. En Windows, hg reemplaza \ por / antes de la coincidencia.
PhiLho

2

sintaxis: glob bin / **

Esta respuesta se muestra arriba, sin embargo, también me gustaría agregar que * y ** se manejan de manera diferente. ** es recursivo, * no lo es.

Ver patrones de Hg


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.