¿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

Xian
fuente

Respuestas:

173

Alternativamente:

syntax: glob
bin/**
Ry4an Brase
fuente
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.

PhiLho
fuente
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.

Derek Slager
fuente
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.

Xian
fuente
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

balrob
fuente
-2

ignorar archivos .class

syntax: regexp
?\.class
usuario2427
fuente