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:
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.
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:
Wenn Sie fertig sind, müssen die Veränderungen (das
sogenannte "Delta") in das Versionsverwaltungssystem
eingetragen werden ("einchecken"). Das erledigt das
folgende Kommando:
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:
Jetzt gibt es zwei Möglichkeiten. Falls ein passendes
"Makefile" angelegt wurde, genügt folgendes Kommando
als root:
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:
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:
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:
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:
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.
|