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

Antworten:


173

Abwechselnd:

syntax: glob
bin/**

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.


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.


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.


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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.