SCCS

Source Code Control System


 

Inhalt

- Was ist SCCS? -
- Dateien editieren -
- Dateien anlegen -
- Infos abrufen -
- Sonstiges -

 

Erstellt von Oliver Fromme
Copyright © 2002-2006
secnetix GmbH & Co KG

Dateien editieren

Dateien, die sich unter SCCS-Kontrolle befinden, sollten nicht direkt editiert werden. Im Normalfall ist dies ohnehin nicht möglich, weil sie schreibgeschützt sind (ihnen fehlt das "w"-Bit). Man könnte dies natürlich umgehen, aber die Änderungen würden verlorengehen, wenn jemand das nächstemal einen Checkout durchführt ("sccs get" oder "make").

Daher ist es unbedingt erforderlich, die nachfolgenden Schritte einzuhalten, um Dateien zu editieren, die sich unter SCCS-Kontrolle befinden.

Wie stellt man überhaupt fest, ob sich eine Datei unter SCCS-Kontrolle befindet, wenn man es nicht weiß? Dies ist ganz einfach:

  • Die Datei ist schreibgeschützt (kein "w"-Bit).
  • Es gibt ein Unterverzeichnis "SCCS".
  • Darin gibt es eine Datei "s.<Name>".

Schritt für Schritt

WICHTIG: Alle im folgenden blau unterlegten Kommandos sind als normaler Benutzer auszuführen, nicht als root. Als root dürfen nur die rot unterlegten Kommandos ausgeführt werden.

In jedem Verzeichnis, das Dateien enthält, die sich unter SCCS-Kontrolle befinden (z.B. /etc), befindet sich ein Unterverzeichnis mit Namen "scratch". Dieses dient dazu, temporäre Kopien von Dateien zum Editieren aufzunehmen. Dieses Unterverzeichnis muß für Sie als normaler Benutzer beschreibbar sein. Wechseln Sie hinein:

cd scratch

Um eine Datei zu editieren, müssen Sie einen "Checkout" durchführen (man sagt auch, man "checkt die Datei aus"). Damit erhalten Sie eine schreibbare Kopie des aktuellen Standes dieser Datei zum Editieren. Im folgenden verwenden wir eine Datei mit Namen "foobar" als Beispiel.

sccs edit foobar

Sie haben jetzt eine Kopie der Datei, die Sie beliebig bearbeiten können. Jetzt kann kein anderer Benutzer die gleiche Datei auschecken (sie ist "gelockt").

Benutzen Sie z.B. "vi", um die Datei zu editieren, aber selbstverständlich können Sie auch einen beliebigen anderen Editor verwenden:

vi foobar

Wenn Sie fertig sind, müssen die Veränderungen (das sogenannte "Delta") in das Versionsverwaltungssystem eingetragen werden ("einchecken"). Das erledigt das folgende Kommando:

sccs delta foobar

Sie werden dabei nach einem Kommentar gefragt. Versuchen Sie, eine sinnvolle Kurzbeschreibung der Änderung anzugeben, damit man später nachvollziehen kann, was und warum Sie es getan haben. Sie brauchen nicht anzugeben, was Sie genau geändert haben, da man dies ohnehin am Delta (diff) sehen kann.

Die Eingabe des Kommentars wird durch Drücken der Enter-Taste beendet. Wenn Sie mehr als eine Zeile Kommentar eingeben möchten, geben Sie einen Backslash ("\") ein, unmittelbar bevor Sie die Enter-Taste drücken. Sie können dann eine weitere Zeile eingeben.

Nach Abschluß dieses Kommandos wird der Lock wieder aufgehoben, so daß auch andere Benutzer die Datei wieder editieren können.

Das Delta und somit die neue Version sind jetzt in der Versionsverwaltung eingetragen, aber natürlich ist die eigentliche Datei noch nicht aktualisiert. Dazu muß man in das übergeordnete Verzeichnis (z.B. /etc) zurückgehen und root werden:

cd ..


su

Jetzt gibt es zwei Möglichkeiten. Falls ein passendes "Makefile" angelegt wurde, genügt folgendes Kommando als root:

make

Das Makefile prüft automatisch, welche Dateien aktualisiert werden müssen und extrahiert diese aus den History-Dateien. Außerdem sorgt es dafür, daß gegebenenfalls andere Dateien, zu denen Abhängigkeiten bestehen, ebenfalls aktualisiert werden (wenn z.B. aus einer Textdatei eine Datenbankdatei generiert werden muß). Schließlich besteht auch die Möglichkeit, daß das Makefile dafür sorgt, daß Prozesse automatisch neu gestartet werden, damit sie ihre Konfigurationsdateien neu einlesen, falls dieses notwendig ist.

Wenn kein Makefile vorhanden ist, verwenden Sie stattdessen das folgende Kommando:

sccs get foobar

Es tut nichts weiter, als die aktuelleste Version der Datei "foobar" aus der History-Datei zu extrahieren. Sie wird schreibgeschützt im aktuellen Verzeichnis abgelegt.

Hier noch einmal eine vollständige Beispiel-Session ("$" ist der User-Prompt, "#" der root-Prompt):

   $ cd scratch
   $ sccs edit foobar
   $ vi foobar
   $ sccs delta foobar
   $ cd ..
   $ su
   Password:
   # make
  oder:
   # sccs get foobar

Tips

Wenn Sie das Kommando "su" verwendet haben, um root zu werden, gelangen Sie mit dem Kommando "suspend" wieder zurück zu Ihrer normalen Benutzer-Shell. Die root-Shell bleibt dabei im Hintergrund. Mit dem Kommando "fg" können Sie sie wieder hervorholen:

suspend


fg

Auf diese Weise können Sie also recht einfach zwischen der Benutzer-Shell und der root-Shell hin- und herwechseln, ohne jedesmal erneut das root-Paßwort eingeben zu müssen. Das ist sehr praktisch, wenn Sie hintereinander mehrfach Änderungen an Dateien durchführen.

Bitte loggen Sie sich niemals direkt als root ein, sondern loggen Sie sie als normaler Benutzer ein und verwenden Sie dann das "su"-Kommando, um root-Zugang zu erhalten. Unter BSD-Systemen können Sie "su -m" verwenden, was den Vorteil hat, daß Sie dann auch als root Ihre gewohnte Login-Shell haben (Sie müssen gegebenenfalls Ihre Login-Skripte anpassen).


Falls Sie einmal versehentlich ein Checkout gemacht haben ("sccs edit"), wollten aber die Datei gar nicht editieren, oder Sie möchten Ihre Änderungen an der Datei wieder verwerfen, ohne das Delta einzuchecken, dann verwenden Sie folgendes Kommando:

sccs unedit foobar

Beachten Sie, daß die Datei foobar dabei im scratch-Verzeichnis zurückbleibt. Sie müssen sie gegebenenfalls manuell löschen.


Manchmal hat man einer Datei Änderungen vorgenommen und weiß dann aber nicht mehr ganz genau, was nun die genauen Unterschiede zur letzten eingecheckten Version sind. Hierfür ist das SCCS-Kommando "diffs" sehr nützlich:

sccs diffs foobar

Es zeigt das sogenannte "pending delta" an. Wenn man jetzt ein "sccs delta" durchführt, würden genau diese Unterschiede für das neue Delta in der History-Datei abgespeichert werden. Bei einem "sccs unedit" würden diese Änderungen verlorengehen.

Hinweis: Für die Ausgabe wird das Standard-diff-Format verwendet, das unter UNIX üblich ist. Wenn man lieber ein Context-diff haben möchte, muß man die Option "-C" (großes "C"!) hinzufügen.


 

[Valid XHTML 1.0]