Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
/ HomePage / Computer / Software / Programmierung / EntwicklerTools / CVSBenutzen
Versionsverwaltung mit CVS hilft nicht nur, den Überblick über Programme, Skripte und Konfigurationsdateien zu bewahren, sondern ist auch ein sehr wertvolles Tool, um gewisse Dateien auf verschiedenen Rechnern konsistent aktuell zu halten. Hier in Stichworten die wichtigsten Fakten zum Umgang mit CVS:
Zuerst ins Arbeitsverzeichnis wechseln, also in den Projektordner selbst, nicht in den darüberliegenden!
cvs import -m"Kommentar" cvs-verzeichnisname vendortag releasetag
Der cvs-verzeichnisname ist der Name des Projektes im CVS-Repository. Er kann auch ein Pfad sein, wenn es sich um ein Unterprojekt handelt.
vendortag ist ein Tag der den Versionszweig beschreibt. Er ist beliebig.
releasetag sollte neu und im gesamten Repository noch nicht vorhanden sein - er bezeichnet das importierte Release des Projektes.
Beispiel:
cvs import -m"Erste Version" Adressverwaltung2005 0.1.0 Adr2005_pre_alpha
Nach einem import
muß ein checkout
erfolgen, damit man mit den Dateien weiterarbeiten kann. Dazu eine Ebene höher gehen, den Projektordner löschen und Checkout vornehmen.
Um sich ein Projekt zum Bearbeiten zu holen, muß man es auschecken:
cvs checkout cvs-verzeichnisname
checkout
funktioniert nur, wenn noch keine Dateien gleichen Namens vorhanden sind. Bevor ein checkout
nach einem import
im gleichen Verzeichnis funktioniert, müssen demzufolge die alten Dateien erst gelöscht werden.
Hat man seine Änderungen getätigt und möchte sie ins Repository zurückschreiben benutzt man das Kommando commit
:
cvs commit -m"kommentar" [Dateiliste]
Sollte -m"..."
nicht angegeben worden sein, wird der Standard-Editor geöffnet und man muß einen Kommentar eingeben. IMHO aufwendiger als gleich einen kommentar anzugeben.
Man kann einzelne Dateien durch Leerzeichen getrennt in der Dateiliste angeben. Wird sie weggelassen, werden alle geänderten Dateien ins Repository geschrieben.
Haben andere Projektmitarbeiter zwischenzeitlich die Sourcen geändert (meist verschlimmbessert ), ist die eigene lokale Kopie nicht mehr aktuell. Mit update
kann man sie aktualisieren:
cvs update [Dateiliste]
Auch hier kann die Dateiliste weggelassen werden, es werden dann alle relevanten Dateien geholt.
Wird eine neue Datei angelegt die zum Projekt gehört (z.B. eine neue Klasse) muß dies dem Repository mitgeteilt werde, dazu gibt es den Befehl add
.
cvs add [-kb] file
wichtig: Für Binärdateien muss die Option -kb
verwendet werden!
Die neue Datei wandert nicht gleich ins Repository, sondern erst beim nächsten commit
.
Variable CVSROOT
setzen (z.B. in der /etc/profile
):
export CVSROOT=:pserver:samba@192.168.8.100:/mnt/daten/cvs
Eine Datei, die ins CVS Repository eingecheckt wird, kann Spezielle Keywords enthalten, die durch CVS ersetzt werden. Das Besondere dieser Keywords ist, daß sie in zwei Schreibweisen funktionieren:
$Keyword$
$Keyword: ''von cvs eingefügte Daten'' $
1. wird durch CVS zu 2. ersetzt. Damit dann das Keyword bei späteren Commits noch erkannt wird, wird eben auch die zweite, bereits geparste Schreibweise von CVS akzeptiert. Genial einfach - einfach genial. Die wichtigsten Keywords sind:
$Author$
$Id$
Beispiel:
$Id: filename.c,v 1.1. 2004/11/09 23:40:56 elsni Exp $
Auch hier gilt das gleiche wie bei $Author$
$Log$
-m"Kommentar"
).
$Header$
$Id$
nur mit vollständigem Pfadnamen
Es gibt noch viel mehr Wissenwertes über CVS, was man alles im Cederqvist Manual nachlesen kann.
Siehe CVS Server setup, dort ist einfach beschrieben wie man so etwas unter Gentoo-Linux aufsetzt.
Falls CVS schon läuft, ist es noch einfacher:
In der /etc/inetd.conf
oder in der /etc/xinetd.d/cvspserver
nach --allow-root=
suchen und noch so einen Eintrag vornehmen, mit einem neuen Ort für das neue Repository. Der --allow-root=
Eintrag ist dann doppelt vorhanden.
Repository anlegen:
cvs <repository-pfad> init
Dann CVSROOT auschecken...
cvs checkout CVSROOT
...und die config Datei entsprechend dem obigem Setup-Guide anpassen. Wieder einchecken. Ein paar User mit htpasswd
anlegen und hinter jedem User in der /etc/passwd
-Datei :cvsuser
einfügen.
Jetzt sollten nur die in der /etc/passwd
angegebenen User sich einloggen können.
cvs diff <file>
Liefert als Output immer etwas wie folgt:
XXXaYYY > neu XXXaYYY < gelöscht
Wobei XXXaYYY
Zeilennummern darstellen.
Es soll ja Leute geben, die können damit was anfangen, ich finde es meist aus dem Kontext gerissen, ich kann mir auch nie merken, was '>' '<' nun bedeuten. Und das, wo ich cvs täglich einsetze, aber man kann in der ~/.cvsrc folgenden Eintrag machen:
diff -u3 -p
Dann bekommt man zwar einen noch größeren Output, der patch
ähnlich ist, aber es ist meist der Kontext zu verstehen, da ein paar Zeilen um die Änderung mit angezeigt werden, desweiteren sind '+' '-' einfach eindeutiger vor den Änderungen und es steht ein paar Zeilen höher drin, welche Funktion eigentlich gemeint war.