Comment puis-je ignorer tout ce qui se trouve dans un dossier dans Mercurial

149

Je recherche une expression pour le fichier .hgignore, pour ignorer tous les fichiers sous un dossier spécifié.

par exemple: je voudrais ignorer tous les fichiers et dossiers sous la corbeille

En fait, tout conseil sur la façon dont les expressions sont formées serait génial

Xian
la source

Réponses:

173

Alternativement:

syntax: glob
bin/**
Ry4an Brase
la source
c'est beaucoup plus facile je pense :)
Xian
PhiLho, je pense que cela filtrerait également les fichiers nommés bin
Peter Gibson
1
Cette réponse, plus cette documentation m'a aidé: selenic.com/mercurial/hgignore.5.html
CenterOrbit
7
bin bin/ bin/* bin/**- Tous font la même chose avec glob c'est-à-dire ignorent tous les répertoires et sous-répertoires nommés bin mais pas les noms de fichiers bin.txt ou bin1. Quel est l'intérêt d'astérix?
utilisateur
Je l'aime pour la clarté, mais utilisez certainement `` bin '' si vous avez intériorisé les règles glob (je suis une resorte de gars)
Ry4an Brase
53

J'ai fait quelques expériences et j'ai trouvé que la syntaxe regex sous Windows s'applique au chemin commençant par le référentiel actuel, avec des barres obliques inverses transformées en barres obliques.

Donc, si votre référentiel est dans E: \ Dev par exemple, hg statusappliquera les modèles contre foo / bar / file1.c et autres. Les ancres s'appliquent à ce chemin.

Alors:

  • Glob s'applique aux éléments de chemin et est enraciné aux parties d'élément
  • foo correspond à n'importe quel dossier (ou fichier) nommé foo (pas à "foobar" ni "barfoo")
  • * foo * correspond à n'importe quel dossier ou fichier avec «foo» dans le nom
  • foo / bar * correspond à tous les fichiers du dossier "foo" commençant par "bar"


  • Regex est sensible à la casse, non ancrée
  • Bien sûr, les caractères spéciaux de regex anti-slash comme. (point)
  • / correspond à \ séparateur de chemin sous Windows. \ ne correspond pas à ce séparateur ...
  • foo correspond à tous les fichiers et dossiers avec "foo" à l'intérieur
  • foo / correspond uniquement aux dossiers se terminant par "foo"
  • / foo / correspond au dossier "foo" quelque part dans le chemin
  • / foo / bar / correspond au dossier "bar" dans le dossier "foo" quelque part dans le chemin
  • ^ foo correspond au fichier ou au dossier commençant par foo à la racine du référentiel
  • foo $ correspond au fichier se terminant par foo

J'espère que cela vous aidera, j'ai trouvé la page HGIGNORE (5) un peu succincte.

PhiLho
la source
J'ai le modèle '' [Dd] ebug * / '' en cours d'utilisation et la chose étrange est qu'il filtre également des fichiers comme '' debug.txt ''
Mehrdad Mirreza
9

Ces deux éléments filtreront également un répertoire appelé cabin, ce qui n'est peut-être pas ce que vous souhaitez. Si vous filtrez au plus haut niveau, vous pouvez utiliser:

^/bin/

Pour les binrépertoires sous votre racine, vous pouvez omettre ^. Il n'est pas nécessaire de spécifier la syntaxe, l'expression régulière est la valeur par défaut.

Derek Slager
la source
4
Cela n'ignorera rien. Le curseur ne dit que des choses dans la racine du dépôt, mais la barre oblique principale n'attrape que les dirs pas dans la racine du dépôt.
Ry4an Brase
2

Nevermind, je l'ai

syntax: regexp
bin\\*

Les expressions suivent la syntaxe standard des expressions régulières Perl.

Xian
la source
2
En effet, et votre expression signifie "fichier ou dossier se terminant par bin et suivi de 0 ou plusieurs contre-obliques" ... Donc ça marche parce que la contre-oblique est annulée par le *, mais elle applique tout ce qui contient "bin" à l'intérieur. Sous Windows, hg remplace \ par / avant la correspondance.
PhiLho
2

syntaxe: glob bin / **

Cette réponse est indiquée ci-dessus, mais j'aimerais également ajouter que * et ** sont traités différemment. ** est récursif, * ne l'est pas.

Voir les modèles Hg

Balrob
la source
-2

pour ignorer les fichiers .class

syntax: regexp
?\.class
user2427
la source