WinCVS
Autor: Jan Picard, 02.09.02
Motivation:
Beim Arbeiten mit cvs auf den Uni-Rechnern treten mehrere Probleme auf:
- (Unix)-cvs erwartet Zeilenendezeichen im Unix-Format ( nur \n ). Bringt man ausgecheckte Dateien nun in die Windowswelt, so verhalten sich die Programme unterschiedlich: BorlandC++ akzeptiert und bewahrt das Zeilenende-Schema, VisualC++ konvertiert ohne weitere Nachfrage die Datei in des DOS-Textformat ( \n\r ). Beim Ruecktransport in die Uni muessen dann aus DOS-Textdateien wieder Unix-Textdateien gemacht werden. Schön wäre doch ein Werkzeug, dass das automatisch berücksichtigt.
-
Mehrere Teams arbeiten gleichzeitig am Quellcode; jedes Team in seiner lokalen Kopie. Je mehr Zeit verstreicht, umso groesser werden die Differenzen zwischen den verschiedenen Versionen. Um dieser Erscheinung entgegenzuwirken, kennt cvs das Kommando update. Dabei wird versucht, Aenderungen, die gegenüber der ausgecheckten Version inzwischen gemacht worden sind, in die lokale Kopie einzuarbeiten. Oft geht das problemlos, machmal gibt es jedoch Überschneidungen, wenn zwei Teams konkurrierende Änderungen an den Quellen gemacht haben. In diesem Falle wird die Version des Erst-Eincheckenden als die Referenz angesehen. Jede danach
einzucheckende Version, bei der es einen Konflikt gibt, der von cvs nicht automatisch behoben werden kann, wird abgelehnt, bis das entsprechende Team die Konflikte manuell beseitigt hat. Je kuerzer die Abstände zwischen aufeinanderfolgenden cvs update sind, desto kleiner kann man den Aufwand einer manuellen Nacharbeit halten. Wenn es dazu ein praktikables Tool gäbe, würde man einfach öfter cvs update aufrufen.
-
Die Entscheidung, welche Datei neu eingecheckt werden muss, trifft cvs aufgrund des "last modified"-Zeitstempels, der mit dem Zeitpunkt des Auscheckens verglichen wird. Differieren diese beiden Zeiten, wird eine neue Version der Datei eingecheckt, auch wenn es keinerlei Änderungen gab. Das stört zu mindest die vernünftige Versionsverwaltung. Transferiert man also sein ganzes Arbeitsverzeichnis in die Uni, werden alle Dateien als geändert angesehen, mit den entsprechenden Konsequenzen. Schön wäre doch ein Tool, bei dem man sieht, welche Deteien eingecheckt werden muessten, und welche nicht, weil man die Datei zwar modifiziert hat, diese Änderungen aber nicht übernommen werden sollen. (Beispiel: Der Pfad zu BorlandC++ in der xcontrol.ide, testweise vorgenommene Einstellungen in der hardware.ini)
Die Lösung: WinCVS
WinCVS ist angetreten, um die vorgenannten Probleme zu lösen. Man findet dieses Stück freie Software unter http://cvsgui.sourceforge.net/. Ein Klick auf "Download" führt zu einer Seite, auf der neben anderen Versionen von cvs für Windows und Mac auch Dokumentation zum Download bereitsteht. Besondere Beachtung verdient hier das Dokument "WinCVS-SSH-Guide_*.zip", das später helfen kann. Ich habe durchaus gute Erfahrungen mit der momentan aktuellen Beta-Version 1.3b8 gemacht.
Damit WinCVS auf das Projekt-Repository zugreifen kann, braucht es eine Möglichkeit, auf das Dateisystem auf einem Uni-Rechner zuzugreifen. rsh scheidet aus, also bietet sich ssh an. Das oben erwähnte Dokument verrät, wie und wo man OpenSSH erhält und wie man es in WinCVS integriert. Eine OpenSSH-Portierung für Windows erhält man z.B. unter http://www.networksimplicity.com/.
Konfiguration
Nach dem Start von WinCVS muss man die Verbindungsmethode (ssh), den Nutzernamen, den zu nutzenden Server und den Pfad zum Projekt-Repository angeben.
Unter "Settings..." muss nur der Pfad zur ssh.exe eingetragen werden
Checkout
Dann kann's schon losgehen: Im linken Fenster ein Linksklick auf ein Verzeichnis, unter dem die Arbeitskopie abgelegt werden soll. Ein Rechtsklick bringt ein Kontextmenü hervor, in dem man "Checkout module..." auswählt.
Daraufhin öffnet sich ein Fenster, das nach dem auszucheckenden Modul sowie nach dem Verzeichnis für die Arbeitskopie fragt.
Je nach Internetanbindung dauert das Auschecken eine Weile, der Fortschritt wird im unteren Konsolenfenster angezeigt.
Update
Hat man eine Weile gearbeitet, empfiehlt sich ein "cvs update". Vor jedem commit ist ein update einfach ein Muss, damit man alle bis zu diesem Zeitpunkt auftretenden Konflikte lösen und alle geänderten Dateien zusammen einchecken kann. Dazu markiert man im linken Fenster das Verzeichnis der lokalen Arbeitskopie, drückt die rechte Maustaste und wählt "Update Selection ...".
Commit
Das Einchecken von geänderten Dateien ist ebenso einfach. Man sortiert alle Dateien am besten nach ihrem Status. Daraufhin werden alle geänderten Dateien zusammen untereinander angezeigt. Man markiert die einzucheckenden Dateien, klickt mit der rechten Maustaste und wählt "Commit Selection ...".
Der Logeintrag sollte kurz und prägnant ausdrücken, worin die aktuelle Änderung besteht.
Weitere Features
WinCVS setzt im Hintergrund alle UI-Operationen in die entsprechenden cvs-Kommandos um. Die Antworten werden grafisch aufbereitet ( z.B. Graph Selection ) oder im Konsolenfenster ausgegeben ( z.B. Diff Selection )