Como posso ignorar tudo em uma pasta no Mercurial

149

Estou procurando uma expressão para o arquivo .hgignore, para ignorar todos os arquivos abaixo de uma pasta especificada.

por exemplo: eu gostaria de ignorar todos os arquivos e pastas abaixo da lixeira

Na verdade, qualquer conselho sobre como as expressões são formadas seria ótimo

Xian
fonte

Respostas:

173

Alternativamente:

syntax: glob
bin/**
Ry4an Brase
fonte
este é muito mais fácil eu acho :)
Xian
PhiLho, eu acho que também filtrar arquivos chamado bin
Peter Gibson
1
Esta resposta, além desta documentação, me ajudou: selenic.com/mercurial/hgignore.5.html
CenterOrbit
7
bin bin/ bin/* bin/**- Todos fazem a mesma coisa com a glob, isto é, ignoram todos os diretórios e subdiretórios denominados bin, mas nenhum nome de arquivo bin.txt ou bin1. Qual é o sentido do asterix?
usuário
I como ele como clareza, mas certamente uso 'bin' se você tiver internalizado as regras glob (eu sou um retipo de cara)
Ry4an Brase
53

Fiz algumas experiências e descobri que a sintaxe regex no Windows se aplica ao caminho que começa com o repositório atual, com barras invertidas transformadas em barras.

Portanto, se seu repositório estiver em E: \ Dev, por exemplo, hg statusos padrões serão aplicados em foo / bar / file1.c e tal. As âncoras se aplicam a esse caminho.

Assim:

  • Glob se aplica aos elementos do caminho e está enraizado nas partes do elemento
  • foo corresponde a qualquer pasta (ou arquivo) chamada foo (não para "foobar" nem "barfoo")
  • * foo * corresponde a qualquer pasta ou arquivo com "foo" no nome
  • foo / bar * corresponde a todos os arquivos na pasta "foo" começando com "bar"


  • Regex faz distinção entre maiúsculas e minúsculas, não ancorado
  • Obviamente, caracteres especiais de regex de barra invertida como. (ponto)
  • / corresponde ao separador de caminhos no Windows. \ não corresponde a este separador ...
  • foo combina todos os arquivos e pastas com "foo" dentro
  • foo / corresponde apenas às pastas que terminam com "foo"
  • / foo / corresponde à pasta "foo" em algum lugar do caminho
  • / foo / bar / corresponde à pasta "bar" na pasta "foo" em algum lugar no caminho
  • ^ foo corresponde ao arquivo ou pasta iniciando por foo na raiz do repositório
  • foo $ corresponde ao arquivo que termina com foo

Espero que isso ajude, achei a página HGIGNORE (5) um pouco sucinta.

PhiLho
fonte
Eu tenho o padrão '' [DD] ebug * / '' em uso e o estranho é, que ele também filtra arquivos como '' debug.txt ''
Mehrdad Mirreza
9

Ambos também filtram um diretório chamado cabin, que pode não ser o que você deseja. Se você estiver filtrando o nível superior, poderá usar:

^/bin/

Para bindiretórios abaixo da raiz, você pode omitir o ^. Não há necessidade de especificar sintaxe, regexp é o padrão.

Derek Slager
fonte
4
Isso não vai ignorar nada. O sinal de intercalação diz apenas coisas na raiz do repositório, mas a barra principal captura apenas dirs que não estão na raiz do repositório.
Ry4an Brase
2

Deixa pra lá, eu entendi

syntax: regexp
bin\\*

As expressões seguem a sintaxe padrão da expressão regular perl.

Xian
fonte
2
De fato, e sua expressão significa "arquivo ou pasta que termina com bin e seguido por 0 ou mais barras invertidas" ... Portanto, funciona porque a barra invertida é anulada pelo *, mas aplica qualquer coisa com "bin" dentro. No Windows, o hg substitui \ por / antes da correspondência.
PhiLho
2

sintaxe: glob bin / **

Esta resposta é mostrada acima, mas também gostaria de acrescentar que * e ** são tratados de maneira diferente. ** é recursivo, * não é.

Veja Padrões Hg

balrob
fonte
-2

ignorar arquivos .class

syntax: regexp
?\.class
user2427
fonte