2008-11-21 7 views
31

Vorbehalt: Ich versuche alle hier aufgeführten Möglichkeiten: How can I ignore everything under a folder in Mercurial.
Keine funktioniert wie ich hoffe.Ordner in mercurial ignorieren

Ich möchte alles unter dem Ordner test ignorieren. Aber nicht ignorieren srcProject\test\TestManager

Ich versuche

syntax: glob 
test/** 

Und es ignoriert test und srcProject\test\TestManager

mit:

syntax: regexp 
^/test/ 

Es ist die gleiche Sache.

Auch mit:

syntax: regexp 
test\\* 

habe ich TortoiseHG 0.4rc2 mit Mercurial-626cb86a6523 + TortoiseHG, Python-2.5.1, PyGTK-2.10.6, GTK-2.10.11 in Windows

Antwort

44

Probieren Sie es ohne den Schrägstrich nach dem Caret in der regexp Version.

^test/ 

Hier ist ein Test:

~$ mkdir hg-folder-ignore 
~$ cd hg-folder-ignore 
~/hg-folder-ignore$ echo '^test/' > .hgignore 
~/hg-folder-ignore$ hg init 
~/hg-folder-ignore$ mkdir test 
~/hg-folder-ignore$ touch test/ignoreme 
~/hg-folder-ignore$ mkdir -p srcProject/test/TestManager 
~/hg-folder-ignore$ touch srcProject/test/TestManager/dont-ignore 
~/hg-folder-ignore$ hg stat 
? .hgignore 
? srcProject/test/TestManager/dont-ignore 

Beachten Sie, dass ignoreme nicht nach oben zeigt und dont-ignorieren ist.

+0

@JaKXz Ja, das funktioniert in allen Versionen von Mercurial. Was du in deinem '.hgignore' hast, kam nicht durch. Stellen Sie sicher, dass Ihre Ignorierdatei als Regex statt als Glob interpretiert wird, und ignorieren Sie nicht Ignorieren, um Dateien zu ignorieren, die Sie bereits hinzugefügt haben. Ignorieren wirkt sich nur darauf aus, wie nicht angehängte Dateien aufgelistet/behandelt werden. –

+0

et al. Die Lösung, die ich gefunden ist, diese zu verwenden: 'Syntax: regexp ^ source \ ist ^ source \ gen' und für eine Datei mit dem Namen .classpath: '^source \ .classpath' – JaKXz

4

installieren Sie können Null-Breite negativ Vorgriff verwenden und Blick hinter Behauptungen festlegen, dass Sie nur test ignoriert werden sollen, wenn es nicht von srcProject voraus ist und nicht gefolgt von TestManager:

syntax: regexp 
(?<!srcProject\\)test\\(?!TestManager) 

Mercurial verwenden reguläre Ausdrücke, Python, so können Sie weitere Informationen über Null-Breite Behauptungen in der Python-Dokumentation finden: https://docs.python.org/library/re.html#regular-expression-syntax

+1

kühl Technik, aber völlig übertrieben in diesem Fall –

+0

Weise komplizierter als es sein muss, um ein einfaches Problem zu lösen. Die Ry4an-Lösung erreicht dasselbe auf viel einfachere Weise. –

3

Beide Fälle funktionierte für mich (auf Linux und Windows):

syntax: regexp 
^backup/  #root folder 
nbproject/ #any folder 

oder

syntax: glob 
./backup/* #root folder 
nbproject/* #any folder 

Es war jedoch nicht, bevor ich einen Link hinzugefügte Datei .hgignore Datei .hgrc in meinem Repo:

[ui] 
ignore = .hg/.hgignore 

auch erwähnenswert, dass mercurial erwähnen ignoriert Dateien, die es nicht Derzeit werden verfolgt, die vor der Konfiguration hinzugefügt wurden, um sie zu ignorieren. Also, lassen Sie sich nicht vom Status hg abhalten, indem Sie sagen, dass einige Felder M (modifiziert) oder! (fehlt) in den Ordnern, die Sie gerade zur Ignorierliste hinzugefügt haben!

+3

'.hgignore' ist in der Regel in das Wurzelverzeichnis des Repositorys, nicht unter '.hg'. –

0

.hgignore Datei unter Stammverzeichnis des

Repository erstellen

die folgenden Inhalte in der Datei Nun fügen.

Syntax: glob

ist/**

* .DS_Store

Dies wird das Verzeichnis ist entfernen und die alle * .DS_Store Dateien aus dem Repository