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