2009-12-25 7 views
25

Ab 0.9.4 behält Mercurial beim Hinzufügen eines symbolischen Links den Link selbst und nicht die Datei oder Verzeichnisse, auf die er verweist. Es gibt jedoch Fälle, in denen es wünschenswert ist, die Dateien zu verfolgen, auf die die symbolische Verbindung zeigt.Wie behandelt man einen symbolischen Link als Verzeichnis in Mercurial?

Wie kann ich Mercurial erzwingen, die symbolische Verbindung zu einem Verzeichnis als normales Verzeichnis zu behandeln?

+3

haben Sie sich bemüht, anstelle von Softlinks? – miku

+1

Ich bin auf einem Mac, und ich kann 'ln' keine harten Links erzeugen. Es beschwert sich, dass das Ziel ein Verzeichnis ist. – dzhelil

+2

Von 'ls (1)' auf meinem Linux-Rechner: '-d',' -F', '--verzeichnis': Erlaube dem Superuser, Verzeichnisse zu verbinden (Hinweis: wird wahrscheinlich aufgrund von Systemeinschränkungen fehlschlagen) für den Superuser). –

Antwort

24

Unter Linux können Sie

mount --bind sourcepath targetpath 

anstelle von symbolischen Links verwenden und Mercurial wird Ziel wie gewohnt Verzeichnis behandeln (getestet auf openSUSE 11.2 mit Mercurial 1.3.1 und auf RHEL6).

Die alternative Syntax, zugänglich für die Aufnahme in /etc/fstab ist

mount -o bind sourcepath targetpath 

Die fstab ist, dann

sourcepath targetpath none defaults,bind 0 0 
+0

Ich habe bestätigt, dass sudo mount --bind quellpfad targetpath wie von Rage Steel empfohlen für mich funktioniert unter Linux (Ubuntu 10.04 mit Mercurial 1.4.3). – pvillela

+0

Jeder Trick für OS X Benutzer? – stigi

5

Ich glaube nicht, dass es eine Möglichkeit gibt, dies zu tun, wenn Sie mit Verzeichnissen arbeiten.

Wenn Sie mit mercurial 1.3 oder später arbeiten, können Sie versuchen, die neue subrepo-Unterstützung zu verwenden, damit Sie einen Repo-Track auf der lokalen Festplatte haben, aber nicht so nahtlos wie ein Link gewesen.

5

Ich war überrascht, als ich das auch gefunden habe, aber es scheint ein Merkmal zu sein, dass die .

Ich plane, es zu umgehen, indem ich Rsync verwende, um die lokale Kopie des Verzeichnisses vor der Übergabe von meinem Makefile zu aktualisieren. Dies ist keine großartige Lösung, aber mein Verzeichnis ist ziemlich klein, also sollte es in Ordnung sein.

2

Nur ein Follow-up auf ausgezeichnete Antwort Rage Steel (mount --bind) :

Um Ihre Montierung beim Booten bereit zu machen (da Montierungen die Neustarts nicht überleben), setzen Sie in Ihre/etc/fstabs:

/paht/to/Quelle/path/to/target binden Standardwerte, bind 0 0

So stellen Sie sicher, um es nach der Quelle angebracht ist.

Verwandte Themen