Mit Convert ein Repository teilen

posted by Thomas G. Willis on November 16, 2009

Nehmen wir an, Sie haben ein Repository mit mehreren Projekten (in eigenen Unterordnern). Uns Sie sind zur Erkenntnis gekommen, dass für jedes Projekt ein eigenes Repository besser ist. Sie können die convert Erweiterung nutzen um das Repository zu teilen aber dabei den Änderungsverlauf zu behalten.

Als Beispiel dient ein so aufgebautes Repository:

/yourrepository
    /DatabaseFoo
    /SweetBusinessLogic
    /BaseUI
    /EinWeiteresContentManagementSystem

Sie haben sich entschlossen das EinWeiteresContentManagementSystem in ein eigenes Repository soll. Hätten Sie früher gewusst wie sich dieser Teil entwickelt hätten Sie ihn wohl als eigenes Repository geführt. So aber sieht ihr Repository noch so aus als ob Sie Perforce nutzen würden, wo die ganze Versionierung eine aufwändige Operation war.

Zum Glück für Sie kann ihnen die Erweiterung convert helfen und ihre Entscheidung rückgängig machen, bevor Sie die Risikokapitalgeber zum Mittagessen treffen.

Als erstes aktivieren Sie die convert Erweiterung:

[extensions]
convert =

Der convert Befehl hat den Parameter --filemap mit dem angegeben werden kann, welche Teile bearbeitet werden sollen und welche nicht. Sie können im gleichen Aufruf auch gleich Dateien umbenennen. Eine Verknüpfung für die Dateien fürs Aufteilen des Repository sieht so aus:

include EinWeiteresContentManagementSystem
rename .

Nun lautet Ihr Befehl für die Konvertierung folgendermassen:

$ hg convert --filemap myfilemap bigrepo EinWeiteresContentManagementSystem-Repo

Und dies ist alles. EinWeiteresContentManagementSystem ist nun in einem eigenen Mercurial Repository.

Was wenn Ihr Repository zu gross ist und unter seiner Last zusammen bricht oder Sie einzelne Teile in eigene Repositories auslagern wollen? Aber was wird aus der Änderungsgeschichte?