ulimativ: Tipps zu "Concurrent Version System" (CVS) gesucht

Hallo miteinander,
ich bin auch mal wieder hier und möchte Euch nach Euren erfahrungen mit CVS befragen. Gibt es PHP-basierte CVS? oder muss ich auf meinem Linuxserver da eines installieren?
Welche Erfahrungen habt ihr mit cvs und könnt ihr mir Produkte empfehlen`?
nacht
uli

  1. Moin!

    ich bin auch mal wieder hier und möchte Euch nach Euren erfahrungen mit CVS befragen. Gibt es PHP-basierte CVS? oder muss ich auf meinem Linuxserver da eines installieren?

    Deine Fragestellung impliziert, dass du davon ausgehst, dass es mehrere CVSsse gibt. Dem ist nicht so. Es gibt genau ein CVS (was schlicht die Abkürzung für "Concurrent Versions System" ist) unter http://www.cvshome.org. Es gibt natürlich andere Systeme, die das gleiche machen - nur heißen die dann anders. Microsofts Lösung nennt sich z.B. VSS - Visual Source Safe (keine Ahnung, warum bei denen immer alles Visual sein muß), und es gibt noch ein paar andere Produkte, deren einziger Lebenszweck es ist, Dateiversionen zu verwalten.

    Daraus folgt: Wenn du "das eine CVS" haben willst, mußt du es dir runterladen und installieren. Ich persönlich werd's in der nächsten Zeit (hoffentlich dauert's nicht noch einen ganzen Monat) bei mir in der Firma einführen - als Linux-Server. Bislang hab' ich nämlich nur WinCVS installiert und benutze es als einziger mit der Option, das Repository im lokalen Dateisystem abzulegen. Aber als recht gute Lösung erscheint mir für Windows-Benutzer auch Tortoise CVS zu sein - das integriert CVS-Befehle in das Explorer-Menü, geradewegs so, wie sich auch WinZIP & Co. dort integriert. Könnte wirklich nett sein - ich hab's mangels echtem Server noch nicht selbst ausprobiert.

    Welche Erfahrungen habt ihr mit cvs und könnt ihr mir Produkte empfehlen`?

    Erfahrungen: Bis jetzt nur gute. Ich denke, es macht viele Aufgaben, die im täglichen Betrieb anfallen, viel einfacher. Alle Projekte, die ich lokal entwickle, lege ich nur noch in CVS an, weil es das Versions-Tracking wesentlich erleichtert - auch wenn meine Versionsbäume derzeit wirklich sehr linear sind. Aber die grundsätzlichen Möglichkeiten, die Entwicklung Schritt für Schritt zurückverfolgen zu können und sich auch einfach mal Zwischenversionen zurückzuholen, sind schon faszinierend. Ich bin gespannt, wenn ich CVS auf dem Server habe, wie sich der Workflow insbesondere auch mit Textdokumenten und Grafikdateien in Verbindung mit gemeinsamem Arbeiten realisiert. Ich habe unlängst schon wieder leichte Anfälle gekriegt, weil Updates eines Dokumentes nicht im Original gespeichert wurden, sondern als neue Datei (mit Datum im Dateinamen) auf dem Fileserver landeten - was man auch erstmal mitkriegen muß. Oder es wird ein grafischer Entwurf gemacht - und mit der Bitte nach Überarbeitungen zurückgegeben - und dann kommt beim zweiten Entwurf die Frage "Hast du den ersten Entwurf noch?" - nein, der ist in den zweiten Entwurf umgearbeitet worden und wurde nicht nochmal extra gespeichert...

    Mit CVS muss man zwar immer noch den jeweiligen Stand auf den Server spielen - wenn man sich daran gewöhnt hat, wichtige Entwicklungsstände mal eben schnell zu committen (am besten mit einem sinnvollen Kommentar), dann ist das alles kein Problem mehr. Und Updates erreichen die Mitarbeiter auch fast automatisch.

    Und als Bonus gibts auch ein Webinterface zu CVS. Ich kann mir gut vorstellen, dass es sich im Intranet recht gut einfügen lässt, oder zumindest Links von einer Intranetseite zuläßt, so dass eine Art "Dokumentencenter" entsteht, welches immer die neueste, aber gleichzeitig _alle_ Versionen aller Dokumente enthält.

    Softwareempfehlung: Siehe oben. WinCVS verbraucht leider ziemlich viele Ressourcen, aber man benötigt es auch nur während des Zugriffs auf den Server (oder das lokale Repository). Wenn man sich eine Datei zum editieren geholt hat, kann man das Programm verlassen. TortoiseCVS habe ich noch nicht getestet. Linuxlösungen kenne ich gar nicht - außer dass es eine Kommandozeile gibt, mit denen man die ganzen Möglichkeiten der grafischen Tools ebenso erledigen kann.

    - Sven Rautenberg

    1. vielen dank für eure sehr kompetenten antworten, habt mir echt weitergeholfen...
      merci nochmal. #
      Uli

  2. Hi uli,

    Gibt es PHP-basierte CVS? oder muss ich auf meinem
    Linuxserver da eines installieren?

    CVS ist ein typisches UNIX-Produkt: Es funktioniert so
    ähnlich wie eine Zwiebel. ;-)

    Ganz innen drin ist ein Baustein, der sich RCS nennt
    (revisions control system). Das ist der elementare
    Versions-Verwalter: Der kann Dateien ein- und aus-
    checken, Versionsnummern vergeben und verstehen und
    ähnliche Dinge. RCS speichert Versionen einer Datei
    mit einer Differenzen-Methode - ein Archiv einer
    Datei enthält also die gesamte Änderungs-Historie,
    ohne dadurch ein Vielfaches der Größe der letzten
    Version zu haben.
    Auf der Ebene einzelner Dateien kann man mit RCS
    alleine schon sinnvoll arbeiten - komfortabel ist
    es allerdings nicht.

    CVS ist dann bereits eine Schicht drüber, die ein in-
    stalliertes RCS als System-Kommandos benutzt. CVS
    versteht nun Dinge wie "Projekte" und Projektverzeich-
    nisse.
    Mit CVS kann ein Anwender ein komplettes Projekt (einen
    Verzeichnisbaum) "aus-checken", d. h. sich eine Kopie
    des Baums der aktuellen (oder der als Parameter ange-
    gebenen) Version aller Dateien eines Projekts anlegen.
    In jedem Verzeichnis legt CVS ein Unterverzeichnis mit
    dem Namen "CVS" an, welches Verwaltungsinformationen
    enthält - beispielsweise: Welche Version welcher Datei
    habe ich ausgecheckt, und welches Änderungsdatum hatte
    die damals? Auf diese Weise kann CVS feststellen, ob
    und in welchem Umfang Du etwas an der aktuellen Kopie
    geändert hast. Beispielsweise steht dort auch drin,
    welche Dateien des jeweiligen Verzeichnisses überhaupt
    zum Projekt gehören - andere Dateien im selben Ver-
    zeichnis werden ignoriert. ("cvs add <dateiname>" fügt
    eine Datei der Menge der "projektdateien" hinzu.)

    Das Wurzelverzeichnis des Projekt-Archivs findet CVS
    über eine Environment-Variable der Shell. Aus diesem
    und dem aktuellen Verzeichnis bastelt sich CVS die
    Pfadnamen zusammen, mit denen es die jeweiligen RCS-
    Kommandos aufruft, welche die eigentliche Arbeit tun.

    Andere Entwickler am selben Projekt können zeitgleich
    ebenfalls eine ausgecheckte Kopie haben. Beim Ein-
    checken kannst Du einzelne Dateien angeben oder auch
    "alles" festschreiben lassen - CVS prüft dann erst mal,
    ob die von Dir ausgecheckten Versionen mit den inzwi-
    schen im Archiv vorhandenen Versionen identisch sind,
    also ob Dein "checkin" von demjenigen Stand ausgeht,
    der inzwischen der aktuelle ist. Falls nicht, bekommst
    Du entsprechende Meldungen und mußt erst mal Deine
    lokalen Änderungen mit denen, die andere Leute an den-
    selben Dateien im Archiv vorgenommen haben, manuell
    zusammenführen - vorher kannst Du nicht alles committen
    (und das ist auch der Sinn der Sache).
    Die Idee dabei ist, daß mehrere Entwickler meistens an
    disjunkten Teilen des Projektes arbeiten, so daß es
    reicht, wenn die tatsächlich auftretenden Kollisionen
    bemerkt werden - auflösen muß man sie selbst.

    Die nächste Zwiebelschale drüber ist dann eine Web-
    Oberfläche, welche die Kommandos des CVS-Produkts auf-
    ruft und deren Ausgaben in HTML-Dokumente umsetzt.
    SourceForge nutzt so etwas beispielsweise:
    http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/mod-gzip/mod-gzip13x/ ist der CVS-Lese-Zugang zum Quelltext von mod_gzip 1.3. Du kannst
    dort in der Historie der Quelltexte blättern, und
    Operationen durchführen wie "welche Zeilen haben sich
    zwischen Version 1.18 und 1.19 geändert? Auf der Ebene
    von CVS ist das ein Systemkommando der Art "cvs diff
    -r11.18 -r21.19" - die Web-Schicht darüber fängt die
    Ausgabe auf und macht eine farbige Tabelle daraus:
    http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/mod-gzip/mod-gzip13x/mod_gzip.c.diff?r1=1.18&r2=1.19

    Welche Erfahrungen habt ihr mit cvs

    Ich habe in der Firma ein Projekt mit einer Viertel-
    million lines of code mit CVS abgewickelt - unsere
    Mitterfirma eines mit der vierfachen Größe.

    und könnt ihr mir Produkte empfehlen?

    CVS ist 'das Produkt'.

    Welche 'Ausbaustufe' Du haben willst, hängt von Deinem
    Arbeitsstil ab. Wenn Du gewohnt bist, auf einer Kom-
    mandozeile zu arbeiten, dann reicht das normale CVS-
    Paket, das ähnlich zu installieren ist wie der GNU-C-
    Compiler.
    Das Kommando "cvs" selbst erklärt seine Optionen; die
    Dokumentation wird in Form von manpages mitgeliefert.
    Wie man dann sinnvoll Projekte anlegt usw., das mußt
    Du natürlich durchlesen.

    Ich habe mir damals Shell-Skripte "do_<projektname>"
    geschrieben, welche als Shell-Alias-Funktionen mein
    Environment so eingestellt haben, daß ich anschließend
    mit CVS in diesem Projekt arbeiten konnte:

    • Environment-Variable auf das Archiv gesetzt,
    • "cd" ins Wurzelverzeichnis der ausgecheckten Kopie,
    • PATH so gesetzt, daß das bin-Verzeichnis dieses
        Projekts drin war
      und ähnliche Kleinigkeiten.
      Die Entwickler mußten dann über nichts mehr nachdenken
    • die brauchten nur noch "cvs checkout", "cvs commit"
      und "cvs diff" verstanden zu haben.

    Mit der Web-Schicht drüber habe ich noch nicht aktiv
    (als committer) gearbeitet - bei mod_gzip nutze ich
    sie bisher nur zum Lesen.

    Viele Grüße
          Michael