Source

hgtip-content / advanced / 2009-11-16-using-convert-to-decompose-your-repository.html

{% extends "_tip.html" %}
{%hyde
    title: Mit Convert ein Repository teilen
    author_name: Thomas G. Willis
    author_link: http://blog.sadphaeton.com
    created: 2009-11-16
%}


{% block excerpt %}
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?
{% endblock %}


{% block tip %}

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]({{ links.tip_edit_hgrc }}):

    [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.

{% endblock %}