subrepo, hg Klon und Symlinks

8

Ich bin ziemlich neu zu mercurial, ich habe viel über dieses Thema gelesen, aber ich konnte keine klare Antwort finden.

Der Merkurführer sagt: "Aus Gründen der Effizienz werden Hardlinks für das Klonen von Quelle und Ziel verwendet befinden sich auf demselben Dateisystem (Beachten Sie, dass dies nur für die Repository-Daten gilt, nicht für das Arbeitsverzeichnis). "

Die Repository-Wiki-Seite lautet: "Alle Dateien und Verzeichnisse, die mit dem .hg-Verzeichnis in. koexistieren Der Repository-Stamm soll sich im Arbeitsverzeichnis befinden. "

Um nun einen Subrepo in einem Hauptrepo zu "verlinken" mache ich:

%Vor%

Bedeutet die obige Definition, dass ich tatsächlich eine Kopie von subrepo erstelle, wenn ich (1) tue? Oder erstelle ich nur einen Symlink zu ../subrepo ? Entsprechend der Ausgabe von ls handelt es sich um eine tatsächliche Kopie. Aber es klingt für mich so seltsam ... Wenn jemand etwas Licht in dieses Thema bringen könnte, würde ich mich freuen.

    
user533784 08.12.2010, 17:53
quelle

2 Antworten

6

Erstens, dieser Teil von Mercurial, ich bin kein Experte, aber hier habe ich verstanden.

Nein, Sie haben keine Verknüpfung zum gesamten Verzeichnis erstellt. Stattdessen wurden die Dateien in das Netzwerk eingebunden.

Dies bedeutet, dass der Speicherplatz auf der Festplatte reserviert ist, um Ihre Verzeichnisstruktur getrennt zu halten, aber die Dateien sind alle identisch, da sie nur geklont wurden und daher als Links zum Original erstellt wurden.

Wenn Sie mit den Befehlen add oder commit ( ci ) beginnen, das Repository zu manipulieren, werden die Hardlinks durch Mercurial gebrochen und separate Dateien werden für jeden auf Anforderung erstellt.

Nun, das ist eine rein technische Sache, Sie brauchen das nicht zu wissen oder sich darum zu kümmern. Wenn es einfacher ist, denken Sie einfach an einen Klon als eine vollständige Kopie des ursprünglichen Repository, separate Dateien und all das. Der Hardlink-Teil dient nur dazu, Speicherplatz für die gleichen Dinge zu sparen.

Da ein typisches Projekt viele Dateien enthält und ein typischer Änderungssatz nur ein paar Dateien ändert, und ein typischer Grund zum Klonen ist, dass Sie eine feste Reihe von Änderungen vornehmen werden, sind Hardlinks sinnvoll, da viele der Dateien in Die Repository-Verzeichnisse werden für die gesamte Lebensdauer des Repositorys zu 100% identisch sein.

Für diejenigen, die das nicht sind, wird all das stillschweigend von Mercurial für Sie gehandhabt.

    
quelle
2

Sehen wir uns einmal an, was passiert, wenn Sie klonen, ohne über Unterverzeichnisse zu sprechen. Wenn du es tust

%Vor%

Dann macht Mercurial feste Links für die Dateien in A/.hg/store/data . Wenn also eine Datei mit dem Namen x verfolgt wird, dann sehen Sie nach dem Klon das

%Vor%

und

%Vor%

sind fest verknüpft - das bedeutet, dass sich die beiden Dateinamen wirklich auf die selbe Datei beziehen. Wie Lasse hervorhebt, ist dies klug, da Sie möglicherweise niemals eine Änderung an x clone vornehmen, und daher gibt es keinen Grund, zwei verschiedene x.i -Dateien für die A - und B -Klone zu erstellen. Ein weiterer Vorteil ist, dass es viel schneller ist, eine feste Verbindung herzustellen, als eine Datei zu kopieren, besonders wenn x.i sehr groß ist: die harte Verbindung ist eine konstante Zeitoperation.

In Ihrem obigen Beispiel fügen Sie dem Repository subrepo ein Unterverzeichnis main hinzu. Ein Subrepository besteht aus zwei Dingen:

  1. das Unterverzeichnis selbst Das, was du erstellst, wenn du es tust

    %Vor%
  2. die Subrepository-Metadaten. Dies speichern Sie in der .hgsub -Datei. Sie müssen Mercurial mitteilen, wo Sie das Unterverzeichnis haben möchten und woher es von Mercurial geklont werden kann.

Sie fragen, ob Sie das Repository kopieren oder symbolisch verknüpfen, und Sie haben es sicher kopiert (geklont), wie Sie es auch mit ls bestätigt haben. Anschließend haben Sie Mercurial einige Metadaten hinzugefügt, die ihm sagen, wo es das Subrepository erwarten kann. Dies hat nichts mit einer symbolischen Verbindung im normalen Dateisystem zu tun, es sind nur einige Metadaten für Mercurial.

    
Martin Geisler 09.12.2010 12:29
quelle

Tags und Links