Wenn Bibliotheks-B und C Verzeichnisse von Project A sein muss, was ich tun , wenn ich ein Projekt D gestartet werden soll, dass Bibliothek B verwendet, ist aber nicht anders mit Projekt A verbundenen überhaupt?
Jedes Projekt kann sowohl existieren unabhängig und als subrepository eines anderen Projekts zur gleichen Zeit. Ich werde es erklären, indem ich einen Workflow vorschlage.
Zunächst einmal jedes Ihrer Projekte (A, B, C) sollte ein gesegnetes Repository hat, die irgendwo veröffentlicht wird:

Sie könnten hgwebdir auf Ihrem eigenen Server laufen, oder Gebrauch machen eines Mercurial Hosting-Dienstes wie Bitbucket oder Kiln. Auf diese Weise haben Entwickler einen zentralen Berechtigungspunkt, von dem Änderungen übernommen werden können, und Sie haben etwas, das Sie sichern können.
Jetzt können Sie Klone dieser Repositorys auf auf zwei verschiedene Arten zu arbeiten:
direkt Ihr Projekt klonen. Zum Beispiel:
hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
und/oder erstellen subrepository Definitionen durch eine .hgsub
Datei im Stamm von ProjectA
mit folgendem Inhalt setzen:
libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB
libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC
Diese subrepository Definitionen Mercurial sagen, dass Wenn Projekt A geklont wird, müssen auch die Klone von Bibliothek B und Bibliothek C in den Ordner libraries
gelegt werden.
Wenn Sie in Projekt A arbeiten und festschreiben, werden Ihre Änderungen in libraries/LibraryB
und libraries/LibraryC
ebenfalls übernommen. Mercurial zeichnet auf, welche Version der Bibliotheken von Projekt A in der Datei .hgsubstate
verwendet wird. Das Ergebnis ist, dass wenn Sie zu einer alten Version des Projekts zu sehen, wie die Dinge letzte Woche funktionierte, erhalten Sie auch die entsprechende Version Ihrer Bibliotheken. Sie müssen nicht einmal Tags erstellen :-)
Wenn Sie hg push
das Projekt A ändert, um das gesegnete Repository, Mercurial wird auch sicherstellen, dass die Änderungen an den Unterverzeichnissen zuerst an ihren eigenen Ursprung zu schieben. Auf diese Weise veröffentlichen Sie niemals versehentlich Projektänderungen, die von nicht veröffentlichten Änderungen der Bibliothek abhängig sind.
Wenn Sie es vorziehen, alles lokal zu speichern, können Sie diesen Workflow dennoch verwenden, indem Sie relative Pfade anstelle von URLs in den Definitionen der Unterrepositorys verwenden.
Wo ist der Bibliotheksordner, den Sie am Ende des Satzes erwähnen? "Diese Subrepository-Definitionen sagen mercurial, dass, wenn projectA geklont wird, auch Klone von LibraryB und LibraryC in den Bibliotheksordner gestellt werden müssen." – LachlanG
Es ist nur ein Ordner, der linke Teil des: Bibliotheken/libraryB = http://bitbucket.org/LachlanG/LibraryB ist, wo der Klon von der rechten Seite sein sollte –
@LachlanG: Es wird im Stamm des ProjectA angezeigt klonen, zum Beispiel 'C: \ Dev \ ProjectA \ libraries \'. –