menu.jpg  ::  Home ::  Computing ::  Downloads ::  Harley Davidson ::  Links ::  Music ::  Nonsense ::  Mail :: 

Es ist durchaus sinnvoll, diverse in ASCII-Texten gespeicherte Dateien einem Versionsverwaltungssystem anzuvertrauen. Man denke nur an Änderungen in Perlscripten, die sich im Nachinein als doch nicht so gut herausstellen oder Modifizierungen an C-Sourcen, die danach zu nicht nachvollziehbaren Compiler-Fehlern führen. Man ist dann auf der sicheren Seite, wenn man noch über mehrere unmodifizierte Versionen des Codes verfügt.

Ich habe letzten Monat begonnen, viele Dateien dieser Art mit dem RCS (Revision Control System) zu verwalten.

1. Einsatzmöglichkeiten für das RCS

Das RCS ist ideal zur Verwaltung von Quelltexten im ASCII-Format, wie z. B.

die in einzelnen Dateien abgespeichert sind.

Man kann diese Dateien in ein Repository einchecken, sie zur Bearbeitung wieder auschecken, testen und die daran vorgenommenen Veränderungen beim erneuten Einchecken übernehmen lassen oder verwerfen. Als besonderes Goodie kann man das RCS auch anweisen, Kommentare oder die von diesem vergebenen Versionsnumern in den einzelnen Dateien abzulegen und fortzuschreiben.

2. Handhabung des RCS an Hand eines Beispieles

Der folgende C-Quelltext, der sich im Verzeichnis '~/devel' befindet, soll unter die Versionsverwaltung des RCS gestellt werden:

    /*
     * hello-world.c - Gibt den String "Hello World" aus.
     *
     * Author: Martin Bock <mbock@bigfoot.de>
     * Date:   12-Jun-1999
     *
     */
   
    #include <stdio.h>
    #include <stdlib.h>

    int
    main(int argc, char **argv) {
           system("clear");
           printf("\nHallo Welt!\n");
           return 0;
    }   

Um die RCS-Dateien von den Arbeitsdateien zu trennen, sollte man ein Unterverzeichnis '~/devel/RCS' anlegen, in dem dann die RCS-Datei(en) des Verzeichnisses '~/devel' abgelegt werden. Man nennt dieses Verzeichnis auch Repository.

Ausserdem sollte man folgende Änderungen im Quellcode vornehmen, die das RCS dann selbständig dynamisch mit Werten füllt:

    /*
     * hello-world.c - Gibt den String "Hello World" aus.
     *
     * $Id$
     *
     * Author: Martin Bock <mbock@bigfoot.de>
     * Date:   12-Jun-1999
     *
     * Revision History:
     * $Log$
     */

    #include <stdio.h>
    #include <stdlib.h>

    int
    main(int argc, char **argv) {
           system("clear");
           printf("\nHallo Welt!\n");
           return 0;
    }

Ein erstmaliges Einchecken der Arbeitsdatei erfolgt mittels des folgenden Befehles:

   # ci -l hello-world.c

Das CVS will von Dir dann noch einen Kommentar zur 'hello-world.c' Datei haben und checkt die Datei als 'Initial Revision' unter der laufenden Nummer '1.1' ein.

Um die Datei zu kompilieren, zu bearbeiten oder nur zu betrachten, muss man sie wieder auschecken. Beim Auschecken expandiert das RCS die beiden Variablen ($Id:$ und $Log$):

   # co hello-world.c

Ist ein Bearbeiten der Datei nach dem Auschecken beabsichtigt, sollte man sie gelockt auschecken, damit etwaige Änderungen auch unter die Kontrolle des RCS gestellt werden:

   # co -l hello-world.c

Die Datei sollte in jedem Fall nach dem Auschecken in etwa folgendermassen aussehen:

    /*
     * hello-world.c - Gibt den String "Hello World" aus.
     *
     * $ hello-world.c,v 1.1 2001/03/17 11:04:36 martin Exp martin $
     *
     * Author: Martin Bock <mbock@bigfoot.de>
     * Date:   12-Jun-1999
     *
     * Revision History:
     * $Log: hello-world.c,v $
     * Revision 1.1  1999/06/12 16:09:03  martin
     * Initial revision
     */

    #include <stdio.h>
    #include <stdlib.h>
   
    int
    main(int argc, char **argv) {
           system("clear");
           printf("\nHallo Welt!\n");
           return 0;
    }

Bei einem erneuten Einchecken einer geänderten Datei, die gelockt ausgecheckt wurde, vergibt das RCS eine neue Revisionsnummer und möchte noch einen Kommentar zur Änderung haben. Ausserdem loggt das RCS in der im Repository befindlichen RCS-Datei alle Änderungen, so dass man mit folgendem Befehl die ätere Version wiederherstellen kann:

   # co -l -r1.1 hello-world.c

Gerade dieses Feature ist genial, wenn sich im nachhinein herausstellen sollte, dass man sich mit einigen vermeintlich genialen Modifikationen in den Fuss geschossen hat und nun gern die doch gar nicht so schlechte Vorversion wieder hätte.

Die Historie einer unter Versionsveraltung stehenden Datei kann man sich mittels folgendem Befehl auf den Bildschirm holen:

   # rlog hello-world.c

Während der Arbeit an einer ausgecheckten Datei kann die Unterschiede zwischen der Arbeitsdatei und der im Repository befindlichen Datei folgendermassen auf den Bildschirm zaubern:

   # rcsdiff hello-world.c

Man kann eine oder mehrere Versionen einer unter Verwaltung des RCS stehenden Datei mittels folgender Befehle aus dem Repository löschen:

   # rcs -o1.3 hello-world.c
   # rcs -o1.1:1.3 hello-world.c

Das RCS kann noch wesentlich mehr, wie beispielsweise ausgecheckte Dateien im Nachhinein wieder zu locken oder zu unlocken, aber mein Webspace ist beschränkt und die Lust, zu tippen, auch ;-) Ein Blick in die wirklich gut gemachte Dokumentation sollte in jedem Fall weiterhelfen.

Insgesamt bietet das RCS eine ganze Menge Goodies und verursacht erfreulich wenig Verwaltungsaufwand. Wer gelegentlich mit Quelltexten aller Art herumhantiert, die ab und an mal an neue Gegebenheiten angepasst werden müssen, sollte unbedingt mal einen Blick darauf werfen.


Valid XHTML 1.0

Zurück zur Main-Site
Impressum
Created with GNU-Emacs on Sat Mar 17 20:09:00 CET 2001

Valid CSS