Gehört zu: Version Control
Siehe auch: RCS, GitHub
CVS Concurrent Versions System (aus Wiki)
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)
Tabelle 1: Meine CVS-Projekte
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