Patches mit Subversion

Posted by : MOnsDaR | Mittwoch, 19. Mai 2010 | Published in

Während der Arbeit mit Projekten anderer (seien es Arbeitskollegen oder OpenSource-Projekte) findet man ab und an Bugs, die sich mit Zugriff auf den Sourcecode leicht selbst beheben lassen.
Doch wie kommuniziert man diese Änderungen nun? Oft hat man keinen Schreibzugriff aufs SVN und selbst wenn, möchte man nicht einfach im Code des Kollegen rumwurschteln.


Subversion bietet die Möglichkeit, alle Änderungen in eine diff-File zu exportieren. Dies ist eine einfache ASCII-Datei die zusätzlich zu den einzelnen Änderungen jeder Datei auch die Revision enthält, mit denen diese gemacht wurden. Sogut wie jeder bessere Texteditor erkennt .diff und kann Syntax-Highlighting auf diese Dateien anwenden. Ein Programmierer, der diese Datei erhält, kann alle Änderungen nachvollziehen und anwenden.


Im einzelnen sehen die Schritte so aus:
  1. Zunächst wird das Projekt aus dem Repository ausgecheckt und alle Änderungen an den Dateien vorgenommen.
  2. Mit dem Befehl svn diff erhält man eine Auflistung aller Änderungen. Der Befehl svn diff > myfirstpatch.diff schreibt diese Auflistung unter Linux in eine Datei.
  3. Zusammen mit weiteren Anmerkungen (vielleicht per Mail oder in einem Bugreport) sendet man die Patch-Datei nun an den anderen Programmierer.
  4. Dieser sollte sich die .diff genau ansehen. Natürlich können Patches auch schädlichen Code beinhalten. Unter Kollegen wird dies nicht vorkommen, aber bei anonymen Patches in Opensource-Projekten ist die Wahrscheinlichkeit schon höher.
  5. Ist der Patch in Ordnung, kann dieser unter Linux mit dem Befehl patch -p0 -i myfirstpatch.diff angewandt und committed werden. Der Befehl sollte im selben Ordner ausgeführt werden, in dem der Patch auch erstellt wurde (im SVN-Root). Der Parameter -p0 stellt sicher, dass alle Dateien gefunden werden. Mit -i wird die Patchdatei angegeben (kurz für input).
Unter Windows wird es einen ähnlichen Weg geben, dies konnte ich leider nicht testen.

(0) Comments

Leave a Response