Wie kann ich alles unter einem Ordner in Mercurial ignorieren?

149

Ich suche nach einem Ausdruck für die .hgignore-Datei, um alle Dateien unter einem angegebenen Ordner zu ignorieren.

Beispiel: Ich möchte alle Dateien und Ordner unter bin ignorieren

Eigentlich wäre jeder Ratschlag, wie die Ausdrücke gebildet werden, großartig

Xian
quelle

Antworten:

173

Abwechselnd:

syntax: glob
bin/**
Ry4an Brase
quelle
Das ist viel einfacher, denke ich :)
Xian
PhiLho, ich denke, das würde auch Dateien mit dem Namen bin herausfiltern
Peter Gibson
1
Diese Antwort und diese Dokumentation haben mir geholfen: selenic.com/mercurial/hgignore.5.html
CenterOrbit
7
bin bin/ bin/* bin/**- Alle machen dasselbe mit glob, dh ignorieren Sie alle Verzeichnisse und Unterverzeichnisse mit dem Namen bin, aber keinen Dateinamen bin.txt oder bin1. Was ist der Sinn von Asterix?
Benutzer
Ich mag es als Klarheit, aber benutze auf jeden re
Fall
53

Ich habe einige Experimente durchgeführt und festgestellt, dass die Regex-Syntax unter Windows für den Pfad gilt, der mit dem aktuellen Repository beginnt, wobei Backslashes in Schrägstriche umgewandelt werden.

Wenn sich Ihr Repository beispielsweise in E: \ Dev befindet, hg statuswerden die Muster auf foo / bar / file1.c und dergleichen angewendet. Anker gelten für diesen Pfad.

So:

  • Glob gilt für Pfadelemente und ist auf Elementteile verwurzelt
  • foo entspricht jedem Ordner (oder jeder Datei) mit dem Namen foo (weder "foobar" noch "barfoo").
  • * foo * stimmt mit jedem Ordner oder jeder Datei überein, deren Name "foo" enthält
  • foo / bar * stimmt mit allen Dateien im Ordner "foo" überein, beginnend mit "bar"


  • Regex unterscheidet zwischen Groß- und Kleinschreibung und ist nicht verankert
  • Natürlich mögen Backslash-Regex-Sonderzeichen. (Punkt)
  • / entspricht \ Pfadtrennzeichen unter Windows. \ passt nicht zu diesem Trennzeichen ...
  • foo vergleicht alle Dateien und Ordner mit "foo" im Inneren
  • foo / stimmt nur mit Ordnern überein, die mit "foo" enden
  • / foo / stimmt mit dem Ordner "foo" irgendwo im Pfad überein
  • / foo / bar / stimmt mit dem Ordner "bar" im Ordner "foo" irgendwo im Pfad überein
  • ^ foo stimmt mit der Datei oder dem Ordner überein, die mit foo im Stammverzeichnis des Repositorys beginnen
  • foo $ stimmt mit der Datei überein, die mit foo endet

Ich hoffe das wird helfen, ich fand die HGIGNORE (5) Seite etwas prägnant.

PhiLho
quelle
Ich habe das Muster '' [Dd] ebug * / '' in Gebrauch und das Seltsame ist, dass es auch Dateien wie '' debug.txt ''
Mehrdad Mirreza
9

Beide filtern auch ein Verzeichnis mit dem Namen heraus cabin, das möglicherweise nicht Ihren Wünschen entspricht. Wenn Sie auf oberster Ebene filtern, können Sie Folgendes verwenden:

^/bin/

Bei binVerzeichnissen unterhalb Ihrer Wurzel können Sie das ^ weglassen. Es ist nicht erforderlich, die Syntax anzugeben. Regexp ist die Standardeinstellung.

Derek Slager
quelle
4
Dies wird nichts ignorieren. Das Caret sagt nur Dinge in der Repo-Wurzel, aber der führende Schrägstrich fängt nur dirs nicht in der Repo-Wurzel.
Ry4an Brase
2

Egal, ich habe es verstanden

syntax: regexp
bin\\*

Ausdrücke folgen der Standard-Perl-Syntax für reguläre Ausdrücke.

Xian
quelle
2
In der Tat, und Ihr Ausdruck bedeutet "Datei oder Ordner, die mit bin endet und gefolgt von 0 oder mehr Backslashes" ... Es funktioniert also, weil der Backslash durch das * aufgehoben wird, aber alles mit "bin" im Inneren angewendet wird. Unter Windows ersetzt hg \ by / vor dem Abgleich.
PhiLho
2

Syntax: glob bin / **

Diese Antwort ist oben dargestellt, ich möchte jedoch auch hinzufügen, dass * und ** unterschiedlich behandelt werden. ** ist rekursiv, * nicht.

Siehe Hg-Muster

Balrob
quelle
-2

.class-Dateien zu ignorieren

syntax: regexp
?\.class
user2427
quelle