Machen mercurial Subrepositories verhalten sich wie Subversion externals

Die FAQ und hginit.com haben mir wirklich geholfen, den Übergang von svn zu hg zu schaffen.

Wenn es jedoch darum geht, die Subrepository-Funktion von Hg in der Art von Subversion-Externen zu verwenden, habe ich everythign ausprobiert und kann das nette Verhalten von svn externals nicht replizieren.

Hier ist das einfachste Beispiel, was ich tun möchte:

Init "lib" -Repository Dieses Repository darf niemals als eigenständiges Repository verwendet werden. Es wird immer von Haupt-Repositorys als Unter-Repository eingeschlossen.

Init ein oder mehrere inklusive Repositorys Um das Beispiel einfach zu halten, "initiere" ich ein Repository mit dem Namen "main"

Habe "main" include "lib" als Subrepository

Wichtig - UND HIER IST, WAS ICH NICHT BEARBEITEN KANN: Wenn ich eine Datei in "main / lib" ändere und die Änderung übertrage, wird diese Änderung in das "lib" -Repository übertragen - NICHT in ein kopiere innerhalb von "main".

Befehlszeilen sagen mehr als Worte. Ich habe so viele Variationen dieses Themas ausprobiert, aber hier ist das Wesentliche. Wenn jemand in der Befehlszeile antworten kann, bin ich für immer dankbar!

1. Init "lib" -Repository

$ cd / home / moi / hgrepos ## Wo ich meine hg-Repositorys speichere, auf meinem Hauptserver

$ hg init lib

$ echo "foo"> lib / lib.txt

$ hg add lib

$ hg ci -A -m "Init lib" lib

2. Initiere das "Haupt" -Repository und füge "lib" als Subrepos ein

$ cd / home / moi / hgrepos

$ hg init main

$ echo "foo"> main / main.txt

$ hg add main

$ cd main

$ hg clone ../lib lib

$ echo "lib = lib"> .hgsub

$ hg ci -A -m "Init main".

Dies alles funktioniert einwandfrei, aber wenn ich einen Klon des "Haupt" -Repositorys erstelle und lokale Änderungen an Dateien in "main / lib" vornehme und sie pushe, werden die Änderungen nach "main / lib" und NICHT nach "pushen". lib ".

IN COMMAND-LINE-ESE, DAS IST DAS PROBLEM:

$ / home / moi / hg-test

$ hg clone ssh: //[email protected]/hgrepos/lib lib

$ hg clone ssh: //[email protected]/hgrepos/main main

$ cd main

$ echo foo >> lib / lib.txt

$ hg st

M lib.txt

$ hg com -m "Geänderte lib.txt, aus den Haupt-Repos heraus" lib.txt

$ hg push

pushing to ssh: //[email protected]/hgrepos/main/liDie letzte Ausgabezeile von hg zeigt das Problem.

Es zeigt, dass ich eine Änderung an einem COPY einer Datei in lib vorgenommen habe, NICHT an einer Datei im lib-Repository. Wenn dies so funktionieren würde, wie ich es gerne hätte, wäre der Push hgrepos / lib, NICHT hgrepos / main / lib. Das heißt, ich würde sehen:

$ hg push

pushing to ssh: //[email protected]/hgrepos/li

WENN SIE DIES IN BEGRIFFEN ANTWORTEN KÖNNEN VON BEFEHLSZEILEN MEHR ALS IN ENGLISCH,Ich werde immer dankbar sein!

Danke im Voraus

mily in Portla

Antworten auf die Frage(2)

Ihre Antwort auf die Frage