Difference between revisions of "CVS"

From Dietrich Blog (Strato)
Jump to: navigation, search
Line 50: Line 50:
 
'''Schritt 1: Initialisieren eines CVS-Repository'''
 
'''Schritt 1: Initialisieren eines CVS-Repository'''
 
<pre>
 
<pre>
cvs -d:local:d:\home\cvsroot init
+
cvs -d:local:d:\home\cvsroot init
 
</pre>
 
</pre>
 
Damit man für das weitere Arbeiten mit CVS nicht immer den Parameter '''-d:local:d:\home\cvsroot''' angeben muss, setzten wir die dafür vorgesehene Environment-Variable: '''SET CVSROOT=:local:d:\home\cvsroot'''.
 
Damit man für das weitere Arbeiten mit CVS nicht immer den Parameter '''-d:local:d:\home\cvsroot''' angeben muss, setzten wir die dafür vorgesehene Environment-Variable: '''SET CVSROOT=:local:d:\home\cvsroot'''.
Line 56: Line 56:
 
'''Schritt 2: Dateien in ein CVS-Repository einstellen ("importieren")'''
 
'''Schritt 2: Dateien in ein CVS-Repository einstellen ("importieren")'''
 
<pre>
 
<pre>
d:
+
d:
cd \home\kracht\www\dietrich.kracht.free.fr\rolodap (genannt "Arbeitsverzeichniss")
+
cd \home\kracht\www\dietrich.kracht.free.fr\rolodap (genannt "Arbeitsverzeichniss")
cvs import -m"trallala" -d -C rolodap  LONZO V1_00
+
cvs import -m"trallala" -d -C rolodap  LONZO V1_00
 
</pre>
 
</pre>
 
Damit wird das aktuelle Verzeichnis mit allen Dateien und Unterverzeichnissen unter dem CVS-Modulnamen "rolodap" in das CVS-Repository gestellt. Umgangssprachlich nennt man "CVS-Module" auch gerne "CVS-Projekte".
 
Damit wird das aktuelle Verzeichnis mit allen Dateien und Unterverzeichnissen unter dem CVS-Modulnamen "rolodap" in das CVS-Repository gestellt. Umgangssprachlich nennt man "CVS-Module" auch gerne "CVS-Projekte".
Line 69: Line 69:
 
'''Schritt 3: Ein leeres CVS-Modul erstellen'''
 
'''Schritt 3: Ein leeres CVS-Modul erstellen'''
 
<pre>
 
<pre>
mkdir xyz
+
mkdir xyz
cd xyz
+
cd xyz
cvs import rolodap LONZO V1_00
+
cvs import rolodap LONZO V1_00
cd ..
+
cd ..
rmdir xyz
+
rmdir xyz
 
</pre>
 
</pre>
 
Damit wird im CVS-Repository ein neues Modul names '''rolodap''' angelegt einschliesslich aller im Repository nötigen CVS-Files (z.B. .owner).
 
Damit wird im CVS-Repository ein neues Modul names '''rolodap''' angelegt einschliesslich aller im Repository nötigen CVS-Files (z.B. .owner).
Line 82: Line 82:
 
'''Schritt 4: Eine CVS-Sandbox erstellen'''
 
'''Schritt 4: Eine CVS-Sandbox erstellen'''
 
<pre>
 
<pre>
d:
+
d:
cd \home\kracht\www\dietrich.kracht.free.fr
+
cd \home\kracht\www\dietrich.kracht.free.fr
cvs checkout rolodap
+
cvs checkout rolodap
 
</pre>
 
</pre>
 
Damit wird  \home\kracht\www\dietrich.kracht.free.fr\rolodap eine CVS-Sandbox für das CVS-Modul "rolodap". Wir sehen das daran, dass ein verstecktes Unterverzeichnes namens "CVS" angelegt wurde.
 
Damit wird  \home\kracht\www\dietrich.kracht.free.fr\rolodap eine CVS-Sandbox für das CVS-Modul "rolodap". Wir sehen das daran, dass ein verstecktes Unterverzeichnes namens "CVS" angelegt wurde.
Line 96: Line 96:
 
'''Schritt 5: Einzelne Inhalte der CVS-Sandbox ins CVS-Repository stellen'''
 
'''Schritt 5: Einzelne Inhalte der CVS-Sandbox ins CVS-Repository stellen'''
 
<pre>
 
<pre>
d:
+
d:
cd \home\kracht\www\dietrich.kracht.free.fr\rolodap
+
cd \home\kracht\www\dietrich.kracht.free.fr\rolodap
cvs add index.php (ggf.  -b für binary, oder gleich TortoiseCVS nehmen)
+
cvs add index.php (ggf.  -b für binary, oder gleich TortoiseCVS nehmen)
cvs commit
+
cvs commit
 
</pre>
 
</pre>
 
Ebenso können Unterverzeichnisse der CVS-Sandbox in das CVS-Repository gestellt werden. <br />
 
Ebenso können Unterverzeichnisse der CVS-Sandbox in das CVS-Repository gestellt werden. <br />
Line 107: Line 107:
 
Der '''cvs checkout''' arbeitet mit dem im Environment-Parameter "CVSROOT" eingestellten Repository. In diesem Falle ein privates CVS-Repository im lokalen Dateisystem meines Notebook-Computers. Genauso kann man sich aber auch ein CVS-Modul aus einem externen CVS-Repository holen:
 
Der '''cvs checkout''' arbeitet mit dem im Environment-Parameter "CVSROOT" eingestellten Repository. In diesem Falle ein privates CVS-Repository im lokalen Dateisystem meines Notebook-Computers. Genauso kann man sich aber auch ein CVS-Modul aus einem externen CVS-Repository holen:
 
<pre>
 
<pre>
cvs -d:pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ant
+
cvs -d:pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ant
 
</pre>
 
</pre>
 
  
  
 
-- Main.DietrichKracht - 16 May 2004
 
-- Main.DietrichKracht - 16 May 2004

Revision as of 22:43, 7 June 2007

CVS Concurrent Versions System

CVS ist der Klassiker für VersionControl: http://www.cvshome.org

Meine Anforderungen

  • Lauffähig auf einem Windows-Entwicklungsrechner mit geringstem Aufwand und möglichst "leichtgewichtig"
  • OpenSourceSoftware bzw. GNU GPL bzw. geringe Kosten und hohe Verbreitung

CVS-Server

Möchte im ersten Schritt noch garnicht einsetzen. Es soll ein lokales CVS-Repository auf meinem Windows-Notebook sein, nur für mich allein.
Da Eclipse anscheinend nicht mit :local: arbeitet, sondern :pserver: benötigt, habe ich zu guter Letzt (s.u.) doch noch den CVSNT-Server installiert.

CVS-Client

Die Mainstream-Lösungen sind:

WinCVS:
war mir schon von der Software-Architektur zu aufwendig und nicht in Übereinstimmung mit meiner Architektur (Python, Tcl, GTK).
http://www.wincvs.org
TortoiseCVS:
Eine ganz schlanke Windows-Lösung, die nur auf C++ basiert und sich sehr schön in den Windows Explorer integriert. Wirklich leicht zu benutzen. Basiert auf dem Code von WinCVS, ist aber nicht so komplex.
http://www.tortoisecvs.org/
Eclipse:
Muss man sich wohl in diesem Jahr genauer anschauen. Das scheint die Zukunft zu sein.
http://www.eclipse.org

CVS-Server für Windows: CVSNT

Neben der Möglichkeit einen CVS-Server auf Windows über Cygwin zu realisieren, gibt es eine sehr gute Portierung auf WinNT (Windows 2000,...) CVSNT. Es gibt ganz ausführliche Schritt-für-Schritt-Beschreibungen für die Installation von CVSNT (was auch nötig ist, da es einige Fallstricke gibt).

Meine CVS Projekte (CVS Module)

Name Pfad
Apache D:\Programme\Apache
Backup ...
diverses ...
docbook ...
Dokumente und Einstellungen ...
etc ...
faulkner.kr8.de ...
... ...
jobs e:\var\jobs

CVS Lektion 1: Anlegen und Füllen eines CVS-Repositories

Das cvs.exe (mitgeliefert von ZeusEdit, TortoiseCVS oder CVSNT) sollte im PATH sein (also: \Programme\ZeusSCC-CVS oder \Programme\TortoiseCVS oder ...). Es wird einerseits intern von dem jeweiligen SCC-Provider verwendet, andererseits kann es als Kommandozeilen-CVS-Utility unter Windows eingesetzt werden, um z.B. Das CVS-Repository per Hand aufzubauen.

Schritt 1: Initialisieren eines CVS-Repository

cvs -d:local:d:\home\cvsroot init

Damit man für das weitere Arbeiten mit CVS nicht immer den Parameter -d:local:d:\home\cvsroot angeben muss, setzten wir die dafür vorgesehene Environment-Variable: SET CVSROOT=:local:d:\home\cvsroot.

Schritt 2: Dateien in ein CVS-Repository einstellen ("importieren")

d:
cd \home\kracht\www\dietrich.kracht.free.fr\rolodap	 (genannt "Arbeitsverzeichniss")
cvs import -m"trallala" -d -C rolodap  LONZO V1_00

Damit wird das aktuelle Verzeichnis mit allen Dateien und Unterverzeichnissen unter dem CVS-Modulnamen "rolodap" in das CVS-Repository gestellt. Umgangssprachlich nennt man "CVS-Module" auch gerne "CVS-Projekte". Das "-d" sorgt dafür, dass das Archivierungsdatum aus dem Filedatum genommen wird, und das "-C" sorgt dafür, dass in das Arbeitsverzeichnis interne Verwaltungsinformationen für CVS gleich mitaufgenommen werden (versteckter Ordner CVS).

Das Riesenproblem mit diesem CVS IMPORT ist, dass Binär-Dateien dadurch zerstört werden (z.B. GIF, JPG,...).

Wenn man das nicht alles in einem Rutsch tun möchte, kann man es auch einzeln Schritt für Schritt tun (s.u.).

Schritt 3: Ein leeres CVS-Modul erstellen

mkdir xyz
cd xyz
cvs import rolodap LONZO V1_00
cd ..
rmdir xyz

Damit wird im CVS-Repository ein neues Modul names rolodap angelegt einschliesslich aller im Repository nötigen CVS-Files (z.B. .owner).

Nun muss ich für jedes CVS-Modul ein CVS-Arbeitsverzeichnis (sog. Sandbox) aufbauen mit "cvs checkout ...". Danach kann ich meinem CVS-Modul gezielt Dateien und Unterverzeichnisse (nur aus dem CVS-Arbeitsverzeichnis) mit "cvs add ..." hinzufügen.

Schritt 4: Eine CVS-Sandbox erstellen

d:
cd \home\kracht\www\dietrich.kracht.free.fr
cvs checkout rolodap

Damit wird \home\kracht\www\dietrich.kracht.free.fr\rolodap eine CVS-Sandbox für das CVS-Modul "rolodap". Wir sehen das daran, dass ein verstecktes Unterverzeichnes namens "CVS" angelegt wurde.

Weil im CVS nicht mit "Locks" gearbeitet wird, benötigt jeder User ständig seine "Work Directories". In den versteckten CVS-Unterverzeichnissen jeder Sandbox speichert sich das CVS-System die nötige Verwaltungsinformation.

Der Verzeichnisname der CVS-Sandbox ist als identisch mit dem Modulnamen im CVS-Repository. Wenn man da besondere Wünsche für den Sandbox-Namen hat, muss man sich das schon beim Erstellen des CVS-Moduls überlegen.

Wenn die als Sandbox verwendeten Verzeichnisse nicht leer sind (macht man gerne am Anfang), erscheinen Warnmeldungen.

Schritt 5: Einzelne Inhalte der CVS-Sandbox ins CVS-Repository stellen

d:
cd \home\kracht\www\dietrich.kracht.free.fr\rolodap
cvs add index.php			(ggf.  -b	für binary, oder gleich TortoiseCVS nehmen)
cvs commit

Ebenso können Unterverzeichnisse der CVS-Sandbox in das CVS-Repository gestellt werden.
Wichtig im CVS: Eine CVS-Sandbox ist immer ein Ordner mit seiner Unterstruktur, wobei Teile der Sandbox ignoriert werden können. Ich mass also alles was zu meinem "Projekt" gehört, in so einer Sandbox unterbringen. Die CVS-Sandbox entspricht dann spiegelbildlich einem CVS-Modul.
Ich kann keine Dateien, die "neben" der CVS-Sandbox stehen in das CVS-Modul einchecken. Jedes "Projekt" muss also hierarchisch strukturiert sein!

Der cvs checkout arbeitet mit dem im Environment-Parameter "CVSROOT" eingestellten Repository. In diesem Falle ein privates CVS-Repository im lokalen Dateisystem meines Notebook-Computers. Genauso kann man sich aber auch ein CVS-Modul aus einem externen CVS-Repository holen:

cvs -d:pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ant


-- Main.DietrichKracht - 16 May 2004