Mercurial: Lokales Repository auf eine entfernte Maschine clonen

Das Szenario: Wir betreuen seit über 3 Jahren ein Partner-Portal. In diesem PHP-Projekt haben wir zuerst ohne Versionskontrolle, dann mit CVS (Concurrent Versions System), später mit SVN (Subversion) gearbeitet und sind mittlerweile bei Mercurial (Hg) angekommen. In diesem Projekt arbeiten wir auch mit einem externen Entwickler des Kunden zusammen und entwickeln parallel mehrere unterschiedlich komplexe Features. Eines davon ist beispielsweise die Anbindung von sofortüberweisung.de als Zahlungsart, wobei die Daten auch mit der DATEV-Software abgeglichen werden müssen.

Getreu unserer Kanban-Vorgehensweise soll nun ein weiterer Entwickler bei der Fertigstellung einer Funktionalität helfen. Das Repository für dieses Feature (ein Klon des Staging-Repositories - wir entwickeln 'mehrschichtig' von der Entwicklung über die Qualitätssicherung bis hin zum Produktions-Stand) lag bislang nur auf dem Rechner eines Entwicklers. Nun sollen sich zwei Entwickler ein Repository teilen, damit am Ende alles wieder in das Haupt-Repository einfliessen kann. Nun kann (und soll) der externe Entwickler nicht direkt auf das lokale Repository zugreifen.

Mercurial sei Dank hört sich das viel komplizierter an, als es ist:

  1. Alle Änderungen vom lokalen Workspace werden in das Quell-Repository eingecheckt, der Stand sollte konsistent sein. (hg com und hg up)
  2. Das lokale Repository wird nun auf eine Maschine geklont, die von beiden Entwicklern erreicht werden kann. Im konkreten Fall geschieht dies von einem Mac mit OS X 10.6.4 auf einen Webserver mit Debian Lenny.
    hg clone /Users/ramonkupper/path/to/HG_SOURCE_REPO ssh://user@server.de/path/to/HG_TARGET_REPO/

    Damit wird auf dem gemeinsam erreichbaren Server ein Klon des lokalen Repositories erstellt.

  3. Der externe Entwickler zieht sich nun von diesem Klon seinen lokalen Klon und kann sich seine Entwicklungsumgebung einrichten.
  4. Der lokale Entwickler kann mit seinem ursprünglichen Repository weiterarbeiten und fortan alle Änderungen in HG_TARGET_REPO "pushen" und von dort "pullen".

Zugegeben, wenn man noch in CVS- oder SVN-Dimensionen denkt, dann ist diese Vielzahl von Repositories verwirrend. Da aber jeder Clon weiss, wo er herkommt und Mercurial alle Änderungen penibel protokolliert, kann man ihn viel einfacher wieder in seinen Ursprung zurückführen.

Eine sehr gute Einführung in Mercurial gibt es unter http://hginit.com/.

Scheinbar ist das komplizierteste bei der Arbeit mit einem verteilten Versionskontrollsystem wie Git oder Mercurial, dass man zuerst alles vergessen sollte was man bei CVS und SVN gelernt hat.

Tags: