In komplexen Projekten arbeiten in den meisten Fällen viele Entwickler an diversen Artefakten. Dazu kommt es schon, wenn Teams aus Mitgliedern mit unterschiedlichen fachlichen Schwerpunkten bestehen, die Unternehmensprozesse (weiter-)entwickeln, wo der Unterbau aus mehreren Domänen zusammengesetzt ist. Leider ist es gängige Praxis, dass irgendwo mehr schlecht als recht dokumentiert wird, welche Verzeichnisse man aus dem Unternehmens-SVN-Repository auszuchecken hat. Tja, und das hat dann auch jedes Team-Mitglied individuell zu machen. Oder?
Ein Beispiel
Das Unternehmens-SVN könnte so aussehen:
Dabei soll in einem Projekt domain-a, -b und -c bearbeitet werden. Nun hat der einzelne Entwickler mehrere Optionen, wie er die Verzeichnis auschecken kann. Er könnte dies, wie schon beschrieben, individuell tun. In dem Projekt, in dem ich aktuell arbeite, sind allerdings ca. 30-40 SVN-Verzeichnisse zu berücksichtigen und bei dieser Hausnummer wird einem schnell klar, dass das nicht skaliert. Eine weitere Option ist: Jemand schreibt ein Script – ein sehr verbreitetes Vorgehen. Aber auch das ist nicht die beste Lösung, da Script-Sprachen teilweise plattformspezifisch sind bzw., wenn sie es nicht sind, man noch Interpreter installieren muss. Mir sind keine Sprachen bekannt, die out-of-the-box auf Windows, Linux und Co. funktionieren. Doch es gibt noch eine dritte, sehr elegante Möglichkeit: Externals ist das Zauberwort.
Was sind Externals?
Externals ist ein SVN-Property, das schon lange existiert, aber selten eingesetzt wird. Richtig angewandt, löst man damit das Problem mit der mangelhaften Dokumentation vollständig und reduziert den Aufwand im Umgang mit einer Vielzahl von SVN-Verzeichnissen oder -Dateien auf ein Minimum. Es besteht sozusagen aus Zeigern, die relativ oder absolut auf Verzeichnisse oder Dateien im selben oder anderen SVN-Repositories verweisen können.
Dem einen oder anderen mag jetzt schon die Lösung unseres Problems in den Kopf geschossen sein: Man erstellt einfach ein weiteres SVN-Verzeichnis, in dem die übrigen Verzeichnisse oder Dateien über Externals referenziert werden. Z.B. so:
In project-x müssen wir die SVN-Properties editieren
und bei einem frischen Checkout sieht das in etwa so aus:
Sofort ist ersichtlich, dass keine weitere Aktion nötig ist.
Fazit
Man muss nicht n Projekte individuell handhaben, man braucht kein Script, man nutzt einfach den in SVN eingebauten Mechanismus zum Referenzieren anderer Verzeichnisse oder Dateien. Dabei bleibt alles an Ort und Stelle in den involvierten SVN-Repositories und es ist für jeden Client – und auch den Benutzer – transparent, wo was herkommt. Auch branches und tags sind so gut verarbeitbar, da man diese einfach in den branches und tags der aggregierenden Verzeichnisse als Externals hinterlegen kann.
Wir konnten damit unsere Vielzahl an Eclipse-Projekten wunderbar über einen Kamm scheren. Und wenn sich etwas an der Externals-Definition ändert, hat jeder Anwender nach einem „svn up“ den gewünschten Zustand.