2010-12-29 6 views
9

Wenn ich dem Stamm meines Projekts eine neue Datei hinzufüge, wird diese mit einem ?-Status in hg st angezeigt und mit hg add hinzugefügt.Wie merkt man, dass Dateien in Unterverzeichnisse eingefügt werden? (hg st, hg add)

Allerdings, wenn ich eine neue Datei in ein Unterverzeichnis hinzufügen, erscheint es überhaupt nicht in hg st und wird nur hinzugefügt, wenn ich die Datei explizit hinzufügen (nicht einmal wenn ich das enthaltende Verzeichnis der Datei hinzufüge).

Wie bekomme ich mercurial, um Dateien in Unterverzeichnissen zu bemerken, ähnlich wie Subversion sie bemerkt?

Dank

+0

Ist dies für jedes Unterverzeichnis (d. H. Unabhängig von seinem Namen) oder nur für bestimmte? –

+0

Bitte poste ein spezifisches Beispiel, das das Problem illustriert, beginnend mit einem 'hg init' wie das Beispiel in meiner Antwort/rate. –

+0

Gibt 'hg status --all 'Ihnen eine Auflistung für die Datei? – Matt

Antwort

14

Nun, schlicht hg add ohne zusätzliche Argumente fügt Dateien in Unterverzeichnissen als auch, sie im Grunde alle Dateien mit dem Status verfolgt unbekannt werden addiert.

Wenn Sie jedoch eine einfache Maske angeben, wird nur Ihr aktuelles Arbeitsverzeichnis (dh das Arbeitsverzeichnis des Befehls hg, nicht das mit dem Repository verknüpfte Arbeitsverzeichnis) ausgeführt, wenn Sie sich also in diesem befinden das Unterverzeichnis, es wird diese Dateien hinzufügen, wenn Sie im Stammverzeichnis sind, wird es stattdessen diese Dateien hinzufügen.

Mit anderen Worten, dies:

hg add test* 

arbeitet nur auf Dateien im Verzeichnis, die Sie gerade befindet.

Sie können dieses Verhalten außer Kraft setzen, indem eine Maske angeben, die hg auf Unterverzeichnisse zu betreiben sagt:

hg add **/test* 

Dieses sagt, dass „alle Dateien hinzufügen, die‚test *‘im aktuellen Verzeichnis und allen Unter übereinstimmen Verzeichnisse.

wenn Sie eine der asterixes entfernen, Sie arbeiten nur auf Unterverzeichnisse des aktuellen Arbeitsverzeichnis.

Es geschrieben, welche spezifischen Befehle ausgeführt, und der Ausgang, wenn überhaupt, wenn Sie würde helfen und die Ausgabe von hg st vorher und nachher.

+1

Ich verwende keine Maske. Ich füge einfach eine Datei in ein Unterverzeichnis ein und mache ein 'hg st', und sehe keine Ausgabe (nicht einmal einen unbekannten'? 'Status für die Datei). Wenn ich das gleiche im Stammverzeichnis mache, sehe ich die Datei mit unbekanntem Status. Es lohnt sich, zu erwähnen, dass das Unterverzeichnis in der .hgignore nicht ignoriert wird. –

+0

Wie lautet der Name des Verzeichnisses und wie lautet der Name der Datei? Können Sie Ihre .hgignore-Datei posten, nur für den Fall? –

+0

Oh, und überprüfen Sie @Mark Tolonen Antwort hier, es könnte sein, dass das Ihr Problem ist. –

3

Haben Sie hg init auch im Unterverzeichnis? Wenn ja, nicht. Im Folgenden stellt die Frage:

C:\>hg init project 
C:\>cd project 
C:\project>hg init sub 
C:\project>echo >file1 
C:\project>echo >sub\file2 
C:\project>hg st 
? file1 

den .hg Verzeichnis des Unterordner löscht, es zu beheben:

C:\project>rd /s/q sub\.hg 
C:\project>hg st 
? file1 
? sub\file2 

Im Gegensatz zu Subversion, Mercurial nur verwendet ein .hg Verzeichnis an der Wurzel eines Projektes.

+0

Danke, aber nein, ich habe kein Unterverzeichnis "hg init", und es gibt keine '.hg' Verzeichnisse außer in meinem root. Irgendeine andere Idee? –

+0

Einzige Idee ist es, ein vollständiges Beispiel der Befehle, die zu dem Problem führen, zu veröffentlichen. Hast du überhaupt einen .hgignore? Vielleicht stimmt etwas zufällig überein. Was passiert, wenn Sie in einem brandneuen Verzeichnis "hg init" erstellen, eine Datei erstellen, ein Unterverzeichnis erstellen, eine Datei im Unterverzeichnis erstellen und "hg status" erstellen? Das sollte beide Dateien anzeigen. –

Verwandte Themen