linux-l: CVS Archiv aktualisieren

Matthias Kranz mskranz at zedat.fu-berlin.de
Sa Okt 2 19:42:25 CEST 1999


On Sat, Oct 02, 1999 at 01:50:00PM +0200, Florian Schintke wrote:
> Wie kann ich ein CVS Archiv wieder auf den aktuellsten Stand
> bringen?
> 
> Ich habe Sachen aus einem CVS Archiv ausgecheckt und viel
> geaendert.
> Dateien modifiziert, neue Verzeichnisse angelegt, Dateien
> in den neuen Verzeichnissen angelegt und auch in
> schon vorher vorhandenen Verzeichnissen Dateien angelegt
> und andere geloescht.
> 
> Jetzt moechte ich den aktuellen Stand ins CVS einchecken.
> Auf welche Ebene muss ich mich begeben (ich nehme an auf 
> Modulebene und welche Kommandos muss ich in welcher Reihenfolge
> eingeben?

Zunaechst wuerde ich ein

% cvs update -d -P

Die Operation vergleicht das Repository mit Deinem Arbeitsverzeichnis und
bringt letzteres auf den neuen Stand. Die Option '-d' sorgt dafuer, dass
Verzeichnisse, die im Repository, aber noch nicht im Arbeitsverzeichnis
vorliegen, angelegt werden. '-P' sorgt dafuer, dass leere Verzeichnisse im
Arbeitsverzeichnis geloescht werden.

Die Ausgabe des 'update' Kommandos gibt folgende Auskuenfte:

A Datei   Die Datei ist neu im Arbeitsverzeichnis, schon mit 'add' dem
          Repository hinzugefuegt, aber noch nicht mit 'commit' eingecheckt
		  worden.
R Datei   Diese Datei wurde im Arbeitsverzeichnis geloescht und wird bei einem
          'commit' auch aus dem Repository "entfernt".
U Datei   Diese Datei existiert im Repository, aber nicht im
          Arbeitsverzeichnis oder die Datei lag in einer neueren Version im
		  Repository (Voraussetzung ist, dass man sie im Arbeitsverzeichnis
		  nicht modifiziert hat, ansonsten siehe 'M' bzw. 'C').
M Datei   Man hat die Datei im Arbeitsverzeichnis modifiziert, waehrend sie im
          Repository unveraendert blieb oder aber sie wurde auch im Repository
		  veraendert, doch CVS konnte die Unterschiede selbststaendig
		  verschmelzen.
C Datei   Dies ist der Konfliktfall, der auftreten kann, wenn die Datei im
          Repository und im Arbeitsverzeichnis gleichzeitig veraendert wurden
		  und CVS nicht selbststaendig aufloesen konnte.
? Datei   Diese Datei ist dem CVS unbekannt.

> Ich habe probiert erst alle Verzeichnisse hinzuzufuegen und 
> dann alle Dateien.
> 
> find . -type d | grep -v CVS | xargs -n 1 cvs add
> find . -type f | grep -v CVS | xargs -n 1 cvs add
> 
> cvs commit
> 
> Das sind natuerlich alle Dateien. Auch die, die schon
> vorher im CVS waren.

Nun, ein 'add' auf eine Datei angewendet, die schon im Repository existiert,
fuehrt nur zu einer Hinweismeldung. Besser ist es, den Output von 'cvs update'
zu analysieren und anhand der obigen Beschreibung zu entscheiden. Im
'contrib'-Verzeichnis der CVS-Distribution befindet sich auch ein Skript
(cvscheck, glaub' ich), dass das Arbeitsverzeichnis durchsucht. Habe ich mir
aber laenger nicht angesehen.

> Geloeschte Dateien werden hier auch noch nicht aus dem CVS
> geschmissen.

Nein. Man loescht Dateien im Arbeitsverzeichnis zunaechst mit einem normalen
'rm Datei'. Anschliessend teilt man CVS mit, dass man diese Datei loeschen
moechte: 'cvs remove Datei'. Dies muss dann noch durch ein 'cvs commit'
bestaetigt werden, was CVS mit einem

new revision: delete; previous revision: x.x

quittiert.

> Und wie funktioniert dann ein update auf einem anderen Rechner? Kann CVS
> aus dem Archiv geloeschte Dateien auch in meinem
> Verzeichnisbaum loeschen?

CVS macht das normalerweise automatisch bei einem 'update'. Es sei denn, ich
habe diese Datei in meinem Arbeitsverzeichnis veraendert (aber noch nicht
eingecheckt) und jemand anderes loescht sie dann. Fuehre ich nun ein 'cvs
update' auf diese Datei aus, meldet mir CVS dieses "Problem", loescht aber
nicht die lokale (veraenderte) Arbeitskopie.

> Wie kann ich CVS statt rsh ssh benutzen lassen?

% export CVS_RSH=/usr/bin/ssh
% cvs -d :ext:user at cvsserver:/path/to/repository ...
 
Gruss,
Matthias
-- 
Matthias Kranz    kranz at math.fu-berlin.de
   http://www.math.fu-berlin.de/~kranz



Mehr Informationen über die Mailingliste linux-l