next up previous


ganz kurze Einführung in CVS

Korbinian Bartels - Klaus Jähne

16. Juli 2000

CVS -- Kann man das essen?

CVS ist ein System zur Versionskontrolle, das für Softwareprojekte entwickelt wurde. Als ein solches sollte es bei folgenden Problemen als Werkzeug dienen:

Generell läßt sich also das folgende Anforderungsprofil für ein Versionsmanagementsystem definieren:

CVS steht im übrigen für Concurrent Version System.

Wie arbeitet CVS?

Ansatz
CVS verwendet ein zentrales Repository (engl. für Behälter). Dieses befindet sich in einem Verzeichnis auf einem Rechner. Darin sind enthalten: $\rightarrow$ siehe Abb 1.

Abbildung 1: ein CVS-Repository
\includegraphics[width=170mm]{repository.eps}

Client-Server
CVS ist eine Client-Server-Anwendung. Das bedeutet: $\rightarrow$ siehe Abb 2.

Abbildung 2: CVS als Client-Server-Applikation
\includegraphics[width=170mm]{client-server.eps}

Struktur des Repository
 

Zugriff auf CVS
Um auf das CVS-Repository zuzugreifen, gibt es verschiedene Aktionen. Diese sollen im nächsten Teil vorgestellt werden.

CVS-Befehle

Die wichtigsten der ca. 50 CVS-Befehle lassen sich am einfachsten anhand einer CVS-Sitzung (siehe auch Abb. 3) zeigen:

Abbildung: üblicher Verlauf einer CVS-Sitzung
\includegraphics[width=170mm]{flow1.eps}

login
Als Benutzer anmelden:
$ export \
  CVSROOT=:pserver:kjaehne@cvs.pdv.fh-heilbronn.de:/usr/people/cvs/cvsroot/
$ cvs login
(Logging in to kjaehne@cvs.pdv.fh-heilbronn.de)
CVS password:

import
Dateien unter CVS-Kontrolle stellen, neues Projekt anlegen
$ cd /home/kjaehne/to_import
$ cvs import -m "implementiert einen schonenden Röst-Algorithmus"\
  kroenung swp2 default
cvs server: Importing /usr/people/cvs/cvsroot/kroenung
N ./kroenung/coffe.java

No conflicts created by this import
Es wird übergeben:

Alle Dateien aus dem Verzeichnis befinden sich jetzt im Repository.

checkout
Dateien aus den Repository holen.
$ cd projects
$ cvs checkout kroenung
cvs server: Updating kroenung
U kroenung/coffe.java

editieren, compilieren, debuggen etc.
...sind keine CVS-Befehle, sondern die nächsten Schritte, üblicherweise in der Entwicklungsumgebung

update
Änderungen mit dem Repository abgleichen
$ cvs update
cvs server: Updating kroenung
M kroenung/coffe.java

commit
Änderungen ins Repository stellen.
$ cvs commit
cvs commit: Examining kroenung
Checking in kroenung/coffe.java;
/usr/people/cvs/cvsroot/kroenung/coffe.java,v  <--  coffe.java
new revision: 1.2; previous revision: 1.1
done
Dazwischen müssen in einem Editor die Änderungen protokolliert werden.

log
Veränderungen anzeigen
$ cvs log kroenung/coffe.java 
RCS file: /usr/people/cvs/cvsroot/kroenung/coffe.java,v
Working file: kroenung/coffe.java
head: 1.2
branch:
locks: strict
access list:
symbolic names:
        default: 1.1.1.1
        swp2: 1.1.1
keyword substitution: kv
total revisions: 3;     selected revisions: 3
description:
----------------------------
revision 1.2
date: 1999/12/06 23:27:08;  author: kjaehne;  state: Exp;  lines: +1 -1
- Bug in der Temperaturregelung behoben
----------------------------
revision 1.1
date: 1999/12/06 22:48:28;  author: kjaehne;  state: Exp;
branches:  1.1.1;
Initial revision
----------------------------
revision 1.1.1.1
date: 1999/12/06 22:48:28;  author: kjaehne;  state: Exp;  lines: +0 -0
Programm implemntiert einen schonenden Roest-Algorithmus
=============================================================================

diff
Unterschiede zwischen zwei Versionen anzeigen
$ cvs diff -c -r 1.1 -r 1.2 kroenung/coffe.java 
Index: kroenung/coffe.java
===================================================================
RCS file: /usr/people/cvs/cvsroot/kroenung/coffe.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -c -r1.1 -r1.2
*** coffe.java  1999/12/06 22:48:28     1.1
--- coffe.java  1999/12/06 23:27:08     1.2
***************
*** 24,30 ****
...
!     public static void main(String argv[])
...
--- 24,30 ----
...
!     public static final void main(String argv[])
...
Es wird angezeigt, was sich zwischen den Versionsständen geändert hat.

add
neue Dateien ins Repository einbinden
$ cd kroenung
$ cvs add filter.java 
cvs server: scheduling file `filter.java' for addition
cvs server: use 'cvs commit' to add this file permanently
$ cvs commit
cvs commit: Examining kroenung
RCS file: /usr/people/cvs/cvsroot/kroenung/filter.java,v
done
Checking in filter.java;
/usr/people/cvs/cvsroot/kroenung/filter.java,v  <--  filter.java
initial revision: 1.1
done

Konfilkte
...ist auch kein CVS-Befehl, hier zeigen wir aber, wir Konflikte vermieden werden. Deren Entstehung illustriert auch Abb.  4.

Abbildung 4: CVS-Sitzung mit Versionskonflikt
\includegraphics[width=170mm]{flow2.eps}

$ cvs update
cvs server: Updating kroenung
RCS file: /usr/people/cvs/cvsroot/kroenung/coffe.java,v
retrieving revision 1.2
retrieving revision 1.3
Merging differences between 1.2 and 1.3 into coffe.java
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in kroenung/coffe.java
C kroenung/coffe.java
$ vi kroenung/coffe.java
$ cvs commit
Es wurde also festgestellt, daß bereits andere Personen diese Datei an der gleichen Stelle verändert haben, und der Entwickler muß den Konflikt nun lösen.

Die Differenzen stehen nun im Sourcecode an der kritischen Stelle:

<<<<<<< coffe.java
    public static final int void main(String argv[])
=======
    void main(String argv[])
>>>>>>> 1.3
Wenn der Konflikt behoben ist, kann die Datei mit commit wieder eingecheckt werden.

Für mehr Komfort steht für Windows-Systeme WinCVS zur Verfügung, das in einem weiteren Teil im Detail vorgestellt wird.

Und hier noch die Adresse unseres CVS-Servers:

T:pserver:<User-ID>@cvs.pdv.fh-heilbronn.de:/usr/people/cvs/cvsroot

Über dieses Dokument ...

ganz kurze Einführung in CVS

This document was generated using the LaTeX2HTML translator Version 98.2 beta6 (August 14th, 1998)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 cvs-handout.tex

The translation was initiated by Klaus Jaehne on 2000-07-16


next up previous
Klaus Jaehne
2000-07-16