Home
Über
Projekte
 CVS
 Contributors
 Online
 Download
 RCS
 Texinfo
 Texi2HTML
Geschichte
Werkzeuge
Unterstützung
 
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3 How data is stored in the working directory

Während wir über CVS Internas diskutieren, die von Zeit zu Zeit zum Vorschein kommen können, können wir auch darüber reden, was CVS in den `CVS'--Verzeichnissen im Arbeitsverzeichnis ("working directory") ablegt. Genau wie beim "Repository" verwaltet CVS diese Informationen und man kann gewöhnlich mit CVS--Befehlen darauf zugreifen. Aber in manchen Fällen kann es nützlich sein, sie direkt anzuschauen. Ebenso kann es sein, daß andere Programme, wie das grafische Frontend jCVS oder das VC Packet für emacs, diese Daten brauchen. Solche Programme sollten den Empfehlungen in diesem Abschnitt folgen, wenn eine gemeinsame Nutzung mit anderen Programmen, die obige Dateien benötigen, möglich sein soll. Dies schließt zukünftige Versionen der gerade genannten Programme und den CVS-client für die Kommandozeile ein.

Das `CVS'--Verzeichnis enthält mehrere Dateien. Programme, die dieses Verzeichnis lesen, sollten alle hier nicht dokumentierten Dateien darin ignorieren, um zukünftige Erweiterungen zu ermöglichen.

Die Dateien werden entsprechend den Text--Datei--Konventionen des jeweiligen Betriebssystems gespeichert. Daraus folgt, daß Arbeitsverzeichnisse nicht portabel sind zwischen Systemen mit unterscheidlichen Konventionen zur Speicherung von Textdateien. Dieses ist beabsichtigt, mit dem Hintergrund, daß die mit CVS verwalteten Dateien wahrscheinlich auch nicht zwischen solchen Systemen portabel seien werden.

`Root'
In dieser Datei steht das aktuelle CVS--Wurzelverzeichnis, wie unter 2.1 Ort des Repositories festlegen beschrieben.

`Repository'
In dieser Datei ist das Verzeichnis innerhalb des Repositories angegeben, mit dem das aktuelle Verzeichnis korrespondiert. Es kann entweder ein absoluter oder ein relativer Pfad angegeben sein; CVS kann seit (ungefähr) version 1.3 beide Formate lesen. Der relative Pfad ist relativ zur (cvs--)Wurzel, und ist der vern=FCnftigere Ansatz. Absolute Pfade sind allerdings recht verbreitet, und sollten von Implementierungen auch akzeptiert werden. Ein Beispiel: Nach Ausführung des Befehls

 
cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc

enthält die Datei `Root'

 
:local:/usr/local/cvsroot

und in der Datei `Repository' steht entweder

 
/usr/local/cvsroot/yoyodyne/tc

oder

 
yoyodyne/tc

Wenn das jeweilige Arbeitsverzeichnis nicht mit einem Verzeichnis im Repository korrespondiert, sollte in der Datei `Repository' der Pfad `CVSROOT/Emptydir' angegeben sein.

`Entries'
Diese Datei enthält eine Liste der Dateien und Verzeichnise im Arbeitsverzeichnis. Das erste Zeichen jeder Zeile gibt an welcher Art die Zeile ist. Wenn ein Zeichen nicht erkannt werden kann, so sollten Programme, die die Datei lesen diese einfach ignorieren, um ein Erweiterung in der Zukunft möglich zu machen.

Wenn das erste Zeichen ein `/' ist, dann ist das Format wie folgt:

 
/name/revision/timestamp[+conflict]/options/tagdate

wobei `[' und `]' nicht Teil des Eintrages sind, sondern stattdessen anzeigen, daß die `+' und Konflikt--Markierungen ("conflict marker") optional sind. name ist der Name der Datei innerhalb des Verzeichnisses. revision ist die Revision, von der die Datei im Arbeitsverzeichnis abstammt, oder `0' für eine hinzugefügte Datei, oder `-' gefolgt von einer Revision für eine entfernte Datei. timestamp ist der Zeitstempel der Datei zu der Zeit, als CVS sie erzeugt hat; wenn der Zeitstempel sich von der tatsächlichen Zeit der letzten Änderung ("modification time") der Datei unterscheidet, bedeutet dies, daß die Datei verändert wurde. Der Zeitstempel wird im Format der ISO C asctime() Funktion gespeichert (zum Beispiel `Sun Apr 7 01:29:26 1996'). Man kann einen String in einem anderen Format eintragen, z.B. `Result of merge', um anzuzeigen, daß die Datei immer als modifiziert betrachtet werden soll. Dies ist kein Spezialfall; um zu sehen, ob eine Datei modifiziert wurde, sollte ein Programm einfach einen String--Vergleich des Zeitstempels dieser Datei mit timestamp vornehmen. Wenn es einen Konflikt gab, kann conflict auf die Zeit der letzten Änderung ("modification time") der Datei gesetzt werden, nachdem die Datei mit Konflikt--Markierungen gespeichert wurde ( 10.3 Conflicts example). Damit bedeutet es, daß der Benutzer offensichtlich den Konflikt nicht aufgelöst hat, wenn conflict nachfolgend gleich der tatsächlichen Zeit der letzten Änderung der Datei ist. options enthält "sticky options" (zum Beispiel `-kb' für eine binäre Datei). tagdate enthält `T' gefolgt von einem tag name, oder `D' für ein Datum, gefolgt von einem sticky tag oder Datum. Beachten Sie, daß sie mit einer (hier nicht dokumentierten) CVS--Version vor CVS 1.5 arbeiten, wenn timestamp statt einem einzelnen Zeitstempel ein Paar von Zeitstempeln enthält, die mit einem Leerzeichen getrennt sind.

Die Zeitzone des Zeitstempels in CVS/Entries (lokal oder universal) sollte die gleiche sein, die das Betriebssystem für die Zeitstempel von Dateien benutzt. Zum Beispiel werden Zeitstempel von Dateien unter Unix in "universal time" (UT) angegeben, also sollten die Zeitstempel in CVS/Entries auch in UT angegeben werden. Unter VMS sind die Datei--Zeitstempel in Ortszeit ("local time") angebeben, sodaß CVS unter VMS Ortszeit benutzen sollte. Diese Regelung gilt, damit Dateien nicht modifiziert erscheinen, nur weil die Zeitzone sich geändert hat (zum Beispiel beim Wechsel zu oder von Sommerzeit).

Wenn das erste Zeichen einer Zeile in `Entries' ein `D' ist, zeigt dies ein Unterverzeichnis an. `D' als einziges Zeichen in einer Zeile bedeuter, daß das Programm, welches die `Entries'--Datei geschrieben hat, Unterverzeichnisse aufzeichnet (Daher weiß man, daß es keine Unterverzeichnisse gibt, wenn eine solche Zeile existiert und keine andere Zeile mit `D' brginnt). Anderenfalls sieht die Zeile so aus:

 
D/name/filler1/filler2/filler3/filler4

wobei name der Name des Unterverzeichnisses ist. Die filler Felder sind für zukünftige Erweiterungen gedacht und sollten ignoriert werden. Programme, die `Entries'--Dateien verändern, sollten diese Felder erhalten.

Die Zeilen in der `Entries'--Datei können in beliebiger Reihenfolge angeordnet werden.

`Entries.Log'
Diese Datei enthält keine anderen Informationen als `Entries', bietet aber eine Möglichkeit zur Akualisierung dieser Informationen, ohne daß die gesamte `Entries'--Datei neu geschrieben werden muß. Dabei bleiben alle Informationen auch dann erhalten, wenn das Programm, das in `Entries' und `Entries.Log' schreibt, plötzlich abbricht. Programme, die die `Entries'--Datei lesen, sollten auch die Datei `Entries.Log' beachten. Wenn letztere existiert, sollte die Datei `Entries' gelesen und danach die in der `Entries.Log'--Datei angegebenen Änderungen "ubernommen werden. Es wird empfohlen, nach Übernahme der Änderungen die Datei `Entries' neu zu schreiben und dann die `Entries.Log'--Datei zu löschen. Eine Zeile in `Entries.Log' ist folgendermaßen aufgebaut: Ein Ein--Zeichen--Befehl, gefolgt von einem Leerzeichen, gefolgt von einer Zeile im Format, das für die `Entries'--Datei gilt. Der Ein--Zeichen--Befehl ist `A' um anzuzeigen, daß der Eintrag hinzugefügt wurde, `R' um anzuzeigen, daß der Eintrag entfernt wurde, oder jedes andere Zeichen, um anzuzeigen, daß die gesamte Zeile in `Entries.Log' ignoriert werden soll (kann für zukünftige Erweiterungen genutzt werden). Wenn das zweite Zeichen einer Zeile aus `Entries.Log' kein Leerzeichen ist, wurde diese Zeile von einer älteren (hier nicht dokumentierten) Version von CVS geschrieben.

Programme, die schreiben und nicht lesen, können die Datei `Entries.Log' ignorieren, wenn sie möchten.

`Entries.Backup'
Dies ist eine temporäre Datei. Es wird empfohlen, eine neue Entries--Datei als `Entries.Backup' anzulegen, und diese dann (soweit möglich, atomar) in `Entries' umzubenennen.

`Entries.Static'
Das einzig wichtige an dieser Datei ist, ob sie existiert oder nicht. Wenn sie existiert, bedeutet dies, daß nur ein Teil eines Verzeichnisses geholt wurde. CVS wird keine zusätzlichen Dateien in diesem Verzeichnis anlegen. Um die Datei zu löschen, benutzen Sie den update Befehl mit der `-d' Option. Dieses holt die fehlenden Dateien und entfernt `Entries.Static'.

`Tag'
Diese Datei enthält "sticky tags" oder "sticky dates" für ein Verzeichnis. Das erste Zeichen ist `T' für ein "branch tag", `N' für ein "non-branch tag", oder `D' für ein Datum. Ist das erste Zeichen keines der oben genannten, sollte die Datei ignoriert werden (Möglichkeit für zukünftige Erweiterungen). Auf dieses erste Zeichen folgt das "tag" oder Datum. Beachten Sie, daß "per-directory sticky tags or dates" für Dinge wie applying to files which are newly added benutzt werden; sie sind nicht zwangsläufig das gleiche wie die "sticky tags or dates" bei individuellen (nicht--cvs)Dateien. Für allgemeine Informationen zu "sticky tags and dates" siehe 4.9 Sticky tags.

`Checkin.prog'
`Update.prog'
Diese Dateien speichern die Programme, die mit den `-i' bzw. `-u' Optionen in der "modules"--Datei angegeben wurden.

`Notify'
Diese Datei speichert Benachrichtigungen (zum Beispiel für edit oder unedit), die noch nicht zum Server gesendet wurden. Das Format dieser Datei ist hier noch nicht dokumentiert.

`Notify.tmp'
Diese Datei verhält sich zu `Notify', wie `Entries.Backup' zu `Entries'. Um also in `Notify' zu schreiben, schreiben Sie zuerst den neuen Inhalt in `Notify.tmp'. Danach können Sie (möglichst als atomare Operation) `Notify.tmp' in `Notify' umbenennen.

`Base'
Wenn "watches" benutzt werden, speichert ein edit--Befehl die originale Kopie der Datei im `Base'--Verzeichnis. Dies ermöglicht einen funktionierenden unedit--Befehl auch dann, wenn nicht mit dem Server kommuniziert werden kann.

`Baserev'
In dieser Datei ist die Revision von jeder Datei im `Base'--Verzeichnis aufgelistet. Das Format ist:

 
Bname/rev/expansion

wobei expansion ignoriert werden sollte, um zukünftige Erweiterungen zu ermöglichen.

`Baserev.tmp'
Diese Datei verhält sich zu `Baserev', wie `Entries.Backup' zu `Entries'. Um also in `Baserev' zu schreiben, schreiben Sie zuerst den neuen Inhalt in `Baserev.tmp'. Danach können Sie (möglichst als atomare Operation) `Baserev.tmp' in `Baserev' umbenennen.

`Template'
Diese Datei enthält die in der `rcsinfo'--Datei ( C.8 Rcsinfo) angegebene Vorlage. `Template' wird nur vom Client benutzt. Nicht--Client/Server CVS benutzt direkt die `rcsinfo'--Datei.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Sun Aug 26 19:34:05 UTC 2001 © 1999, 2000, 2001 by Manual Translation Project webmaster@manual-translation-project.org