Notwendige Änderungen an einem Projekt wie zum Beispiel Erweiterungen durch zusätzliche Klassen, Module oder Formulare die den Funktionsumfang erweitern oder ändern oder die Internationalisierung durch Übersetzungen in andere Sprachen sollen als Projektpflege verstanden werden. Solange Sie allein an einem Projekt arbeiten kennen Sie den aktuellen Projektstand. Das ändert sich, wenn Sie mit anderen Entwicklern an einem oder mehreren Projekten zusammenarbeiten.
Ausgangssituation:
Zwei Entwickler A und B arbeiten getrennt-gemeinschaftlich an einem Projekt. Der Entwickler A hat dem Projekt mehrere Prozeduren hinzugefügt und dafür andere modifiziert oder gelöscht. Um den Entwickler B von den Änderungen zu informieren könnte Entwickler A ihm das geänderte, u.U. sehr umfangreiche, Projekt-Archiv zusenden. Statt dessen schlägt Entwickler A dem Entwickler B vor, nur die Änderungen am Projekt, die in einem so genannten Patch gespeichert sind, in seine Projektversion einzufügen.
Ein Patch ist eine Text-Datei *.patch, in der die Differenzen – so genannte Deltas – zwischen einer Datei alt.ext und einer Datei neu.ext in einem bestimmten Format gespeichert sind. In einer vom Konsolen-Programm 'diff' erzeugten Patch-Datei können auch mehrere Dateien behandelt werden, so dass mit einer Patch-Datei auch eine ganze Ordnerstruktur auf eine neue Version gebracht werden kann. Zum Erzeugen dieser Art von Patch-Datei verwendet man den Schalter -r (–recursive), um rekursiv auch alle Unterverzeichnisse zu vergleichen. Sie brauchen als Gambas-Entwickler weder das Programm 'diff' noch das Programm 'patch' – mit dem ein Patch eingespielt wird – in der Konsole einsetzen. Die IDE von Gambas verfügt im Menü über die Einträge:
Projekt> Patch> Anlegen... Projekt> Patch> Anwenden...
und nutzt sowohl zum Erzeugen eines Patches als auch zum Einspielen eines Patches intern die Programme 'diff' und 'patch' über Dialoge.
Im folgenden Auszug aus dem Inhalt der Patch-Datei SpineCalcD-0.1.4~SpineCalcE-0.1.7.patch können Sie über die einfachen führenden Plus- und Minuszeichen am Anfang einer Zeile die hinzugefügten Inhalte (+) und die gelöschten Inhalte (-) gut erkennen. Die Änderungen im Beispiel betreffen den Quelltext in der Klasse .src/FMain.class als auch im Formular .src/FMain.form in den verglichenen Projekten SpineCalcD (Version 0.1.4) und SpineCalcE (Version 0.1.7):
diff -urNaX /tmp/gambas-patch-ignore a/notes/combobox.txt b/notes/combobox.txt --- a/notes/combobox.txt 2017-12-18 17:43:32.000000000 +0100 +++ b/notes/combobox.txt 2017-12-18 17:44:11.000000000 +0100 @@ -1,9 +1,11 @@ … diff -urNaX /tmp/gambas-patch-ignore a/.src/FMain.class b/.src/FMain.class --- a/.src/FMain.class 2017-12-18 17:43:32.000000000 +0100 +++ b/.src/FMain.class 2017-12-18 17:44:11.000000000 +0100 @@ -1,28 +1,29 @@ ' Gambas class file - FMain.Caption = "Spine-Berechnungen für Pfeile" + FMain.Caption = "Spine Value Calculator for Arrows" FMain.Resizable = False ... -Public Sub btnBerechnen_Click() - SpineBerechnen() Case 2 - $iSehnenOffset = -5 + $iBowStringOffset = -5 End Select - If optMitKoecher.Value = True Then - $iKoecherOffset = 5 ... Private Sub ClearResults() - txbSpineHolz.Clear() + txbSpineWood.Clear() txbSpineCarbon.Clear() End diff -urNaX /tmp/gambas-patch-ignore a/.src/FMain.form b/.src/FMain.form --- a/.src/FMain.form 2017-12-18 17:43:32.000000000 +0100 +++ b/.src/FMain.form 2017-12-18 17:44:11.000000000 +0100 @@ -1,63 +1,62 @@ # Gambas Form File 3.0 { Form Form - MoveScaled(0,0,48,32) + MoveScaled(0,0,49,32) Icon = Picture["symbols/form_icon.png"] ... - { lblSpineHolz Label + { lblSpineWood Label MoveScaled(2,17,19,4) - Text = ("Spine-Wert (Holz):") + Text = ("Spine (Wood):") } - { txbSpineHolz TextBox + { txbSpineWood TextBox MoveScaled(22,17,18,4) Background = &HDFEFFF& }
Nachdem beide Entwickler das Projekt SpineCalcD bis zur Version 1.0.4 entwickelten und erfolgreich erprobten, nennt der Entwickler A eine Kopie des Projektes SpineCalcD in SpineCalcE um und ändert alle relevanten Texte auf dem Formular und im Quelltext von der deutschen in die englische Sprache. Anschließend fertigt er einen Patch zwischen der Version 0.1.4 und der Version 0.1.7 an und schickt die Patch-Datei SpineCalcD-0.1.4~SpineICalcE-0.1.7.patch an den Entwickler B.
Achtung: Die Projekte werden jeweils umbenannt, damit auch Sie das Anlegen und Einspielen von Patch-Dateien auf Ihrem Computer nachvollziehen können.
Abbildung 11.7.1.1: Erster Schritt
Abbildung 11.7.1.2: Zweiter Schritt
Abbildung 11.7.1.3: Letzter Schritt – Patch mit dem automatisch generierten Datei-Namen speichern
Über das erfolgreiche Anlegen eines Patches werden Sie informiert:
Abbildung 11.7.1.4: Erfolgsmeldung
Der Entwickler B startet sein Projekt SpineCalcD und spielt den vom Entwickler A übermittelten Patch SpineCalcD-0.1.4~SpineICalcE-0.1.7.patch ein und hebt damit sein Projekt auf den neuen Stand:
Abbildung 11.7.2.1: Deutsche Version
Abbildung 11.7.2.2: Patch auswählen
Abbildung 11.7.2.3: Patch anwenden …
Abbildung 11.7.2.4: Englische Version
Der Entwickler B nennt zwei Kopien des Projekts SpineCalcD in SpineCalcE und SpineCalcED um, übersetzt das Projekt SpineCalcED und schickt dem Entwickler A den Patch SpineCalcE-0.1.7~SpineCalcED-0.1.10.patch, der die Änderungen mit der Übersetzung enthält. Diesen Patch kann der Entwickler A einspielen und beide Entwickler haben jetzt eine Version, die für eine deutsche Locale das Projekt mit deutschen Texten startet. Hinweise zur Übersetzung eines Projektes finden Sie im → Kapitel 11.4 I18N.
Alle Projekte (SpineCalcD, SpineCalcE, SpineCalcED) und die beiden Patch-Dateien finden Sie im Download-Bereich.