Ich hasse es zu sehen, fast jedes Verzeichnis in meinem Repository Liste jede Datei zweimal, einmal mit einem Punkt davor und einmal ohne. Ich habe versucht, meiner .hgignore-Datei .*
hinzuzufügen, aber es hat keine Wirkung. Ist das die falsche Syntax und, was noch wichtiger ist, ist es eine schlechte Idee, das überhaupt zu versuchen? Vielen Dank.Wie mercurial alle versteckten Dateien ignorieren?
Antwort
Sie haben fast die richtige Antwort in den Kommentaren von Gavinb, aber das Spiel war ein wenig zu breit. Das Schlüsselkonzept zum Ignorieren nach dem Gesicht wurde jedoch von RogerPage, wiederum in einem Kommentar (was ist, wenn alle Kommentare zu Antworten bevorzugen?).
Blick Lassen Sie uns bei diesen neun Dateien:
dir.with.dots/file.with.dots
dir.with.dots/filewithoutdots
dir.with.dots/.filestartwithdot
dirwithoutdots/file.with.dots
dirwithoutdots/filewithoutdots
dirwithoutdots/.filestartwithdot
.startwithdot/file.with.dots
.startwithdot/filewithoutdots
.startwithdot/.filestartwithdot
Wenn im Standard regex Modus für hgignore Sie tun:
\..*
Sie ignorieren acht dieser neun Dateien:
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dir.with.dots/file.with.dots
I dir.with.dots/filewithoutdots
I dirwithoutdots/.filestartwithdot
I dirwithoutdots/file.with.dots
das ist breiter als Sie sagten, Sie wollten. Es ignoriert alles mit einem Punkt irgendwo drin.
zu ignorieren alle Dateien und Directores (nicht das, was Sie gesagt haben, aber was Sie scheinen zu wollen), beginnend mit einem Punkt Sie dieses regexp Muster verwenden:
(^|/)\.
, die besagt, dass die Sache vor dem wörtlichen Punkt muss der Anfang der Zeile (^
) oder ein Schrägstrich sein.
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dirwithoutdots/.filestartwithdot
Das fing nur Dateien oder Verzeichnisse, die mit einem Punkt beginnen.
Das andere wichtige Konzept, das kam, war, dass. Hgignore keine Wirkung hat, nachdem eine Datei hinzugefügt wurde. Es verhindert das Hinzufügen von Joker, Sie können jedoch .hgignore immer mit einem expliziten hg add
überschreiben. und sobald Dateien hinzugefügt wurden, wird der hgignore nicht mehr konsultiert.
Das ist wirklich wirklich praktisch, weil Sie breit ignorieren können (zB: .*\.jar
) und fügen Sie dann die Ausnahmen, die Sie manuell ohne fuz mit Ihrer hgignore-Datei möchten. In diesem Fall bedeutet das, dass Sie die Dateien, die Sie bereits versehentlich hinzugefügt haben, in die Datei hg rm
eingeben müssen, und tonfa hat gezeigt, wie Sie das tun (solange sich in Ihren Dateinamen keine Leerzeichen befinden).
Am Ende, es klingt wie das, was Sie in Ihrer .hgignore Datei wollen, ist:
(^|/)\._
und dass Sie die, die Sie haben bereits hinzugefügt entfernen müssen:
find . -type f -name "._*" -print0 |xargs -0 hg rm
Weg, viel zu gründlich. Kudos! –
Ich benutze dies in meinem .hgignore
:
syntax: regexp
# dotfiles
(?<![^/])\.
in dem es heißt: Perioden nicht durch etwas anderes als af voran orward Schrägstrich.
Ry4ans Lösung ist auch gut, ich habe diese auch schon früher benutzt. Nicht sicher, was effizienter ist.
Die Syntax etwas wie '\ .. * wäre' aber es ist sehr verdächtig, dass Sie alle Dateien beschreiben, die mit einem Punkt und ohne. Normalerweise hätten Sie in einem Repo keine dot-Dateien. Welche Dateien verfolgen Sie? ('hg manifest') – gavinb
Das hat leider immer noch nicht funktioniert. Ich habe ein bisschen übertrieben, als ich sagte, dass es überall Dot-Dateien gibt, aber in mehreren Verzeichnissen hat jede Datei ein Dot-File-Äquivalent. Ich habe .hgignore mit Ihrer Syntax bearbeitet, 'hg addremove' ausgeführt und ein Commit durchgeführt, und alle befinden sich noch in meinem Repository. –
Die Syntax hängt davon ab, ob Sie die Glob- oder Re-Syntax verwenden (z. B. eine Zeile der Form "syntax: re" über der Anweisung). Aber '. *' Ist korrekte Globsyntax. Wenn die Dateien bereits festgeschrieben sind, müssen Sie sie einzeln entfernen (oder mit 'hg rm. *'), Und addremove wird dies nicht für Sie tun. –