2012-03-29 7 views
2

geschoben ich ein neues Repository auf meinem lokalen Computer erstellt, hinzugefügte Dateien und engagierte mir die folgende Struktur in meiner Arbeitskopie geben:Prevent ein Verzeichnis von in Mercurial

-/a  
-/b 

ich meine ersten verpflichten schieben will ein Remote-Repository auf Bitbucket. Ich möchte jedoch das Verzeichnis b ignorieren, damit es nicht gedrückt wird. Ich fügte hinzu,

syntax: 
glob b/** 

meine .hgignore Datei. Das Verzeichnis b wird trotzdem gedrängt.

Wie kann ich das verhindern?

Antwort

1

in .hgignore add:

^b/.* 

oder b/*, wenn Sie die untere glob Syntax verwenden (regex gibt Ihnen viel mehr Kontrolle).

Die Syntax ist in der ersten Zeile definiert und alle Regeln sind in den folgenden Zeilen definiert.

Wenn Sie möchten, globbing, wäre die erste Zeile syntax: glob und wenn Regex, wäre die erste Zeile syntax: regexp (impliziert standardmäßig). Siehe documentation.

Beachten Sie, dass Mercurial eigentlich nicht leere Verzeichnisse schieben, so dass der einzige Weg, können Sie es testen, wenn Sie eine Datei in haben b/

+0

hgignore verhindert nicht nur das Nachverfolgen von Dateien, sondern verhindert auch, dass Dateien verschoben werden. Ist das richtig? – kayfun

+0

@kayfun '.hgignore' dient als Filter für die Zurückweisung nicht verfolgter Dateien (z. B. wenn ein einfaches' hg add' mit keinen Argumenten ausgeführt wird). Wenn Sie bereits Dateien in 'b /' aufgenommen haben, werden diese Dateien nicht automatisch * entpackt *. Überprüfe (über 'hg st --all'), ob bereits Dateien in'/b' verfolgt werden und entferne sie manuell (über 'hg forget'), wenn sie sind; Sie könnten bereits verfolgt worden sein, bevor Sie ein hgignore erstellt haben. –

+0

@ kayfun: einfach gesagt, nein. –

5

Dies kann nicht in Mercurial geschehen: Sie nicht drücken kann nur ein erster Version einer Datei und dann spätere Änderungen ignorieren. Sie können auch keinen Teil eines Änderungssatzes verschieben - Sie drücken entweder den gesamten Änderungssatz oder nicht. Auf diese Weise stellt Mercurial sicher, dass Sie in allen Clones einen konsistenten Snapshot Ihres Projekts haben.

Preet ist korrekt, wenn er schreibt, dass die .hgignore Datei ein Filter für unverspurte Dateien ist. Die Datei .hgignore wird verwendet, um die Ausgabe von Befehlen wie hg status zu filtern und die Dateien zu filtern, die durch Ausführen von hg add ohne weitere Argumente hinzugefügt wurden.

+0

Vielen Dank für die Antwort. Ich möchte nur sicher sein, dass ich dich verstehe. Das b-Verzeichnis, auf das ich in meiner Frage Bezug nehme, ist eigentlich eine Zend-Bibliothek, die sehr groß ist, weil ich es nicht gepusht haben will. Was ich ursprünglich hätte tun sollen, war, mein Repository zu erstellen, meine .hgignore-Datei zu erstellen, das zend-Bibliotheksverzeichnis zu ignorieren, die Dateien dem Repository hinzuzufügen und dann zu committen. Auf diese Weise wird das zend-Verzeichnis nicht verschoben, da es nie hinzugefügt wurde, um von mercurial verfolgt zu werden. Ist das korrekt? – kayfun

+0

@kayfun: Das ist richtig - verfolgen Sie keine Dinge, die Sie nicht herumschieben möchten. –

+0

Ok, ich habe gerade eine hg vergessen auf die hinzugefügten Dateien, die ich nicht verfolgt oder geschoben werden soll. Ich habe bereits Änderungen an der Arbeitskopie vorgenommen, was bedeutet, dass bereits ein Changeset existiert. Ich habe gerade eine Forget-Operation ausgeführt, die dem Changeset hinzugefügt wird.Mein erstes Commit wurde als 'Initial Commit' bezeichnet. Wenn ich das aktuelle Changeset festschreibe und es 'Änderungen' beschreibe und ich beschließe, zu einem leeren Remote Repository zu gehen, würde ich vermuten, dass 'Initial Commit' als erstes geschoben wird, welches den Zend beinhaltet Verzeichnis, die 'Änderungen' werden als nächstes verschoben, was dazu führt, dass das entfernte Repository auch das zend-Verzeichnis vergisst. Ist das korrekt? – kayfun