Ich habe Probleme beim Einrichten eines Projekts in Mercurial mit Subrepos.
Ziel:
Ich möchte die Struktur wie folgt einrichten:
%Vor%Also gibt es drei Repos: Build, A und B. B ist in A geschachtelt, A ist im Root-Build-Repository verschachtelt. Der Build-Repo wird verwendet, um Abhängigkeiten zu verfolgen, Subrepo A wird verwendet, um die Haupt-Quelldateien zu verfolgen, und Subrepo B (und andere) werden verwendet, um die Modul- / Plugin-Entwicklung zu verfolgen.
Problem / Frage
Ich habe kein Problem damit, das erste Build-Repo und das verschachtelte Subrepo_A einzurichten, indem ich einfach den Subrepo_A-Pfad und die Quelle zur .hgsub-Datei hinzufüge und sie an den Build-Repo festlege. Wenn ich jedoch nach dem Hinzufügen der subrepo_B Pfad / Quelle zu den Build-Repos. Hgsub und dann versuchen, festschreiben, bekomme ich die Fehlermeldung:
Abbruch: Pfad 'Subrepo_A / Modules / Sebrepo_B' befindet sich im verschachtelten Repo 'Subrepo_A'
Mercurial scheint einen verschachtelten Repo in einem bereits verschachtelten Repo nicht zu mögen. Ist das wahr, oder fehlt mir etwas? Gibt es bessere Ideen zum Verwalten von Builds / Abhängigkeiten?
Das Problem ist eine der unvermeidlichen Einschränkungen von Mercurial: Ein Repository entspricht einem Ordnerbaum auf Ihrem Computer. Das Repository ist für alles verantwortlich, das sich in dieser Ordnerstruktur befindet.
Wenn Ihr Repository der obersten Ebene ein Unter-Repository enthält, übergibt es dem Unter-Repository die vollständige Kontrolle über diesen Teil seiner Ordnerstruktur. Daher kann die oberste Ebene kein anderes Unter-Repository irgendwo in den ersten Unter-Repository-Ordnern angeben.
Lösung 1
Subrepo_B ist eigentlich eine Abhängigkeit von Subrepo_A. In diesem Fall sollten Sie in Ihren Repositorys die wahre Abhängigkeit widerspiegeln, indem Sie Subgrep_A's .hgsub-Datei bearbeiten, um Subrepo_B unter Module / Sebrepo_B hinzuzufügen. Das funktioniert, weil Subrepo_A die Kontrolle über seine Ordner behält.
Lösung 2
Subrepo_A hängt nicht von Subrepo_B ab, du hast es aus Bequemlichkeit dort hingestellt. In diesem Fall sollten Sie sowohl Subrepo_A als auch Subrepo_B Subrepos (an verschiedenen Stellen) von Build_Repo machen.
In Ihrer Situation müssen Sie subrepoB zu subrepoA hinzufügen.
Ich würde vorschlagen, Abhängigkeiten so zu verschieben, dass Ihr Baum nur zwei Ebenen hat, aber das ist möglicherweise nicht möglich. Es ist sonst immer keine sehr glatte Erfahrung.
Tags und Links dependencies mercurial version-control build-dependencies mercurial-subrepos