Die verteilte Versionsverwaltung eines Projektes ist eine notwendige Optimierung für den Entwicklungsvorgang, besonders wenn mehrere Entwickler am Projekt beteiligt sind. Bei uns hat sich diese Notwendigkeit ergeben, weshalb wir bei uns im Haus einen Git-Server eingerichtet haben, mit dem unser conzept 16-Projekt unter eine verteilte Versionsverwaltung gestellt wird. Da es auch von einigen Kunden bereites Anfragen zur Versionierung von conzept 16 gab, möchte ich Ihnen unsere Lösung vorstellen.
Was ist Git?
Git ist eine freie verteilte Versionsverwaltung für vornehmlich textbasierte Dateien. Das besondere hierbei im Vergleich zu anderen ähnlichen Programmen, wie SVN: Es wird kein zentraler Server benötigt, um an dem Projekt mitzuarbeiten. Das Repository, das Lokal vorhanden ist, aber auch auf einem Server liegen kann, ist in Branches organisiert. Änderung am Projekt werden durch einen Commit als Snapshot gespeichert. Der letzte Commit, wird von der Versionskontrolle verfolgt. Durch einen Zeiger wird der aktuelle Commit im aktuellen Branch referenziert. Jeder neue Commit zeigt auf seinen Vorgänger. Ein Commit besteht aus einem Commit-Objekt, welches unter anderem auf ein Tree-Objekt verweist, in dem die Projektdateien also BLOBs referenziert sind. Alle Objekte werden durch einen Hash gekennzeichnet und auch angesteuert.
Mehr über Git unter Git: Book und Wikipedia.
Versionierung im Einsatz
Die Arbeit mit Git kann natürlich per Kommandozeilenaufruf erfolgen. Allerdings gibt es einige nützliche Git-Clients, die das Ganze etwas vereinfachen – für Windows zum Beispiel TortoiseGit.
Um ein conzept 16-Projekt unter die Git-Versionierung zu stellen, bedarf es allerdings ein paar Funktionalitäten, ganz unabhängig von Git, da es keine direkte Schnittstelle zwischen einer conzept 16-Applikation und dem Versionierungstool gibt. Somit kann zum Beispiel nicht direkt auf dem Prozedur-Stand gearbeitet werden, der im Repository vorliegt, sondern nur auf dem, der in der Datenbank vorhanden ist.
Daher mussten wir uns zunächst Gedanken darüber machen, was genau aus dem Projekt unter die Versionskontrolle gestellt werden sollte. In unserem Fall betraf es die Prozeduren der Datenbank sowie die Datenstruktur. Zusätzlich mussten wir uns einen Workflow überlegen, der zur Arbeit in conzept 16 unter Einsatz von Git passt.
Notwendig hierbei ist folglich eine Möglichkeit um Prozeduren aus der Datenbank in das Git-Verzeichnis zu exportieren oder entgegengesetzt zu importieren. Um dies bequem und effizienter Weise während der Projektarbeit durchzuführen, haben wir uns dazu entschlossen ein Plugin dafür zu erstellen, das auf Basis der Plugin-Schnittstelle von conzept 16 arbeitet. Das Git-Plugin ist ein zusätzliches Fenster, das neben dem Designer geöffnet ist und sieht wie folgt aus:
Mit dem Plugin können sämtliche Prozeduren aus der Datenbank exportiert und in die Datenbank importiert werden. Weiterhin besteht die Möglichkeit, die Datenstruktur dateiweise im XML-Format zu exportieren. Zusätzlich können die für uns wichtigsten Git-Befehle (Commit, Checkout, Push, Pull und Fetch) durchgeführt werden. Dazu muss Git natürlich auf dem Rechner installiert sein. Die Funktionen setzen aber auch voraus, dass ein Workspace ausgewählt wird.
Commit:
Einen Snapshot mit den aktuellen Änderungen des Branches erstellen
Checkout:
Zu einem anderen Branch wechseln, oder einen neuen Branch erstellen. Kann auch zum zurücksetzten des Branches auf den letzten Commit verwendet werden
Push:
Den Branch mit einem anderen Branch, der zum Beispiel auf einem Server liegen kann, abgleichen
Pull:
Das lokale Repository auf den Stand eines Repositories bringen, das zum Beispiel auf einem Server liegen kann
Fetch:
Repository-Informationen aktualisieren
Hierbei war im Bezug auf conzept 16 zu achten, dass nach einem Checkout oder einem Pull der Prozedurstand aus dem lokalen Repository in die Datenbank importiert werden muss. Vor einem Commit wiederum, müssen die Prozeduren aus der Datenbank exportiert werden.
Das Fenster setzt sich aus den Buttons, die links auf dem Bild des Plugins zu sehen sind, sowie aus einem Label (unter dem Button „Select Workspace“) zur Anzeige des Status und des aktuellen Branches, zusammen. Den Rest des Fenster nimmt ein Textedit-Objekt ein, in dem Statustexte gezeigt werden, die direkt von Git erzeugt werden.
Die Git-Befehle werden durch SysExecute()
ausgeführt.
Das Plugin ist nach dem Vorlagen-Manager aus der CodeLibrary entwickelt. Falls Interesse an den Prozeduren des Plugins besteht, können Sie gerne einen Kommentar dazu hinterlassen.
6 Antworten
Sehr schönes Feature – bitte mir ebenso übersenden.
Dank und Gruß
@gkoinzer
Das Plugin kann bisher nicht erkennen, welcher der neuere Stand ist. Das ist aber natürliche eine nützliche Erweiterung.
Ich möchte an der Stelle anmerken, dass das Plugin kein vollständiger Git-Client ist und eher als Beispiel gesehen werden sollte.
sehr schön!
Kann das PlugIn erkennen, ob das Repository oder das Projekt den neueren Stand enthält?
Bitte Prozeduren zusenden – würde ich gerne verwenden!
Klasse, darüber hatten wir bereits mehrfach gesprochen.
Wir hätten ebenfalls Interesse.
Beste Grüße,
Christopher Habermann
Bitte schicken Sie mir die Prozeduren dazu.
Vielen Dank im voraus.
Beste Grüße von der schönen Bergstrasse
– Jürgen Müller –
Das Plugin wird für uns sicher auch nützlich sein.
Bitte um Zusendung.
Besten Dank und viele Grüße