Symfony2 & Mercurial
Es ist ja kein Geheimnis, dass wir für unsere Entwicklungsarbeit auf das hervorragende Mercurial SCM setzen. Wir sind mehr als zufrieden mit den Möglichkeiten, die uns Mercurial eröffnet, aber leider auch bei manchen Projekten ein wenig außen vor. So zum Beispiel bei Symfony2, das bei sämtlichen Wartungsarbeiten voll auf Git setzt. So gibt es zwar die Möglichkeit, Projekte mit der Symfony Standard Edition (SSE) automatisch zu aktualisieren, allerdings müssen diese Projekte dann auch als Git-Repository verwaltet werden.
Da wir häufig (so wie im Moment auch) Projekte mit Symfony umsetzen (und zugegebenermaßen auch gern mal überlegen, das ein oder andere in Sally zu übernehmen, siehe zum Beispiel sly_Response), standen wir bisher immer wieder vor der Frage, wie wir das Aktualisieren der Projekte erledigen sollten.
Eine Möglichkeit wäre natürlich, die Projekte als Mercurial-Repositories anzulegen und Symfony a) als Subrepository oder b) als eigenständiges Repository zu verwalten. Das scheitert allerdings recht schnell daran, dass zwei Repositories nicht im gleichen Verzeichnis leben können. Außerdem hätten wir dann in allen Projekten auch die vollständige Symfony-Revisionsgeschichte (inkl. der von Doctrine und allen anderen Bundles). Diese Daten benötigen wir jedoch nicht, wenn wir *mit* und nicht *an* Symfony entwickeln wollen.
Abgesehen davon wäre es auch möglich, Updates von Hand vorzunehmen. Also einen Git-Checkout der SSE vorzunehmen und alle Dateien von Hand in das Projektrepository rüberzukopieren. Da freut sich der Praktikant sicher…
Aus der Not heraus ist deswegen ein dritter Weg umgesetzt worden. Wir erzeugen unsere eigene Symfony-Standarddistribution. Dazu nehmen wir die normale SSE, fügen zwei Bundles hinzu (Doctrine Fixtures & Doctrine Migrations) und verpacken alles zusammen in einem Mercurial-Repository. In unregelmäßigen Abständen lassen wir dann ein kleines Shellscript laufen, dass die Git-Quellen aktualisiert und alle Änderungen 1:1 in das Mercurial-Repository übernimmt. Dabei entsteht dann ein Repository, das zwar die SSE enthält, aber nicht deren ganze Revisionsgeschichte.
Das fertige Repository kann bei Bitbucket geklont werden. Der Projektablauf stellt sich dann denkbar einfach dar: Distribution klonen, Entwicklung in dem Klon durchführen und ab und an mal einen Pull ausführen, um das eigene Projekt zu aktualisieren. Keine Notwendigkeit mehr, Git zu verwenden, da wir uns darum kümmern, die Distribution aktuell zu halten. Die Distribution enthält abgesehen von den beiden Bundles (die wir für so praktisch erachten, dass wir sie mit aufgenommen haben) keine Änderungen an Symfony selbst. Die kommenden Änderungen bezüglich des Doctrine-Bundles sind bereits entsprechend eingearbeitet.
Wer mit der Distribution arbeitet, kann natürlich in seinem eigenen Klon weitere Bundles hinzufügen oder auch bestehende entfernen (muss dann halt beim Pull aufpassen). So wird man vermutlich auch das src\Acme\DemoBundle entfernen wollen.
Wir hoffen, es der Mercurial-Community damit einfacher zu machen, Symfony zu verwenden.
Dieser Beitrag wurde von Christoph Mewes am 16. Januar 2012 verfasst.
Kategorien: Webentwicklung
Kommentare
1 Blogs aus Sachsen-Anhalt bei ebuzzing.de – Ranking für Januar 2012 | world wide Brandenburg am 31. Januar 2012 um 17:04
[...] Weißenfels (Weißenfels/11765) 43. Tischtennisblog Allemannia 08 Jessen (Jessen/11766) 44. web and variants (Magdeburg/11767) 45. Hummels Blog (Schermen (11768) 46. Bündnis gegen Rechts Magdeburg [...]
2 Christoph am 31. Januar 2012 um 17:03
Wir haben den hg-Transport nicht ausprobiert. Zum einen hatte ich bisher wenig positive Erfahrungen, git und hg zu verheiraten (v.a. hg -> git ist scheinbar unmöglich kompliziert). Zum anderen sind die in Symfony enthaltenen Scripts (bin/vendors) auf Git ausgelegt und ich wollte nicht das Rad neu erfinden. Mit hg hätte ich den ganzen Kram mit den Abhängigkeiten nachimplementieren müssen. So war es dann in der Summe einfacher, für das Abrufen der Repositories Git zu verwenden und erst das Ergebnis in hg zu verpacken. PS: Subrepos mit hg sind auch zum Kotzen.
3 LeSpocky am 31. Januar 2012 um 17:03
Man kann mit Mercurial auch git-Repositories klonen mit folgendem Plugin: http://hg-git.github.com/ – Habt Ihr das mal probiert?