CVS1 ist das "Concurrent Versions System", ein netzwerktransparentes Versionskontroll-System. Im Bereich FreieSoftware und OpenSource ist es sehr verbreitet, weil man damit im Team Software entwickeln kann, auch wenn die Programmierer über die ganze Welt verstreut sind.
Homepage: http://www.cvshome.org/
Lizenz: GPL
Online-Handbücher:
- dort gibt insbesondere das Kapitel 6 einige Tipps zur Zusammenarbeit an einem Projekt.
Seiten hier im Wiki:
Papierware:
"Open Source Projekte mit CVS" von Karl Fogel, mitp-Verlag, 3-8266-1416-X.
CVS in Stichworten
- Neues Repository initialisieren (einmalig):
- cvs -d /pfad/zum/repository init
- Neues Projekt beginnen:
- cvs import -m "Log-Eintrag" projektname hersteller-marke versions-marke
projektname dient dann als Name eines neuen Unterverzeichnisses im Repository
- hersteller-marke = z.B. username / kürzel
- versionsmarke = z.B. start
- cvs import -m "Log-Eintrag" projektname hersteller-marke versions-marke
- Arbeitskopie auschecken:
- cvs checkout projektname
erstellt neues Unterverzeichnis projektname im aktuellen Verzeichnis und füllt es mit den entspr. Daten aus dem Repository
- cvs checkout projektname
- Eigene Arbeitskopie updaten:
- cvs [-q] update [-d | -P]
- -q : quiet (relativ leise, mehr Ausgaben als bei -Q)
- -d : directory (neue Verzeichnisse holen/anlegen)
- -P : prune (leere Verzeichnisse entfernen)
- cvs [-q] update [-d | -P]
- Unterschied zwischen CVS und Arbeitskopie anzeigen:
- cvs [-Q] diff [-c|-u|-y]
- -Q : quiet (ruhig)
- -c : context diff generieren
- -u : unified diff generieren
- -y : side-by-side diff generieren (Vorsicht: lang und breit!)
- cvs [-Q] diff [-c|-u|-y]
- Revisionen anzeigen:
- cvs status dateiname
- Unterschiede zwischen verschiedenen Revisionen anzeigen:
- cvs diff -c -r 1.4 -r 1.5 dateiname
- Änderungen in's CVS hochladen:
- cvs commit -m "was hab ich getan"
- Änderung zurücknehmen:
- cvs update -j 1.3 -j 1.2 dateiname
- das führt eine Datei "dateiname" der Version 1.3 auf die Version 1.2 zurück (in der Arbeitskopie).
- cvs update -j 1.3 -j 1.2 dateiname
- Dateien hinzufügen:
- cvs add dateiname
- cvs commit -m "dateiname hinzugefügt bla bla" dateiname
- Verzeichnisse hinzufügen:
- cvs add dirname
- Binärdateien:
- CVS verwaltet Binärdateien - allerdings eher schlecht (weil dort keine Diffs gehen).
- Binärdatei hinzufügen:
- cvs add -kb dateiname
- Dabei werden keine Zeilenenden umgewandelt und auch keine Schlüsselwörter ersetzt (denn das würde eine Binärdatei zerstören!).
- Dateien entfernen:
- rm dateiname
- cvs remove dateiname
- cvs commit -m "dateiname entfernt" dateiname
- Verzeichnisse entfernen:
- cd dirname
- rm datei1 datei2 ...
- cvs remove datei1 datei2 ...
- cvs commit -m "blabla" datei1 datei2 ...
- cd ..
- cvs update -P
- Log-Nachrichten lesen:
- cvs log dateiname
- Dateien umbenennen:
- mv altername neuername
- cvs remove altername
- cvs add neuername
- cvs commit -m "altername umbenannt in neuername" altername neuername
- Standardoptionen setzen:
cat >>~/.cvsrc diff -u update -P cvs -q <Strg-D>
Damit werden dann immer unified Diffs erstellt, update immer mit -P aufgerufen und cvs immer mit der globalen Option -q (also relativ "leise").
Beschränkungen von CVS
- CVS merkt sich keine Owner/Group und keine Mode-Bits. Wenn man also z.B. /etc im CVS verwaltet, muss man sich nach einem Checkout selbst darum kümmern (manche Programme weigern sich dann auch zu laufen, wenn sie falsche Berechtigungen auf ihren Configs bemerken).
- Ein Umbennen/Verschieben von Dateien ist ohne Verlust der History nicht möglich (wird zumindest nicht vom Programm unterstützt). Solange man keine Branches einsetzt, dürfte es mit einem manuellen Eingriff ins Repository funktionieren.
CVS GUI-Frontends
Es gibt verschiedene Ansätze, die angeblich viel zu komplizierte Benutzung von cvs durch ein GUI-Frontend zu vereinfachen.
Cervisia
Cervisia nutzt die QT-Bibliothek und ist eine wirklich praktische Sache. Cervisia ist in KDE 3 bereits enthalten und kann für ältere Versionen von http://cervisia.sourceforge.net runtergeladen werden. Cervisia kann die Struktur eines Repositories grafisch darstellen und auch Diffs farbig anzeigen.
nautilus-apotheke
Apotheke ist ein Plugin für den Datei Manager nautilus von GNOME mit ähnlichen Fähigkeiten wie Cervisia für KDE.
CVS Utilities
Für CVS gibt es diverse unterstützende Programme, um die Anwendung von CVS zu vereinfachen.
cvsfs
cvsfs ermöglicht die Einbindung eines CVS Repository analog zu einem mount-Befehl. Dabei werden die von CVS verwalteten Dateien in einem lokalen Verzeichnis eingeblendet. Ein Vorteil dabei ist, dass man die Dateien nicht erst per "cvs co" auf die lokale Platte kopieren muss, nur um zu sehen, ob es eine bestimmte Datei gibt. Eine weiterführende Beschreibung gibt es hier auf der Seite cvsfs.
Weitere Versionsverwaltungssoftware
GnuArch - einfacher und besser als CVS
Git - neues Tool von Linus für den Kernel. OffeneFrage: Wer hat schöne Links zu Doku oder so?
siehe auch ONLamp.com: The New Breed of Version Control Systems
Fragen
Gibt es eine Möglichkeit CVS so zu verwenden, dass es zwei verschiedene Repositories benutzen kann? Beispiel:
Ich habe auf meinem Notebook Dateien, die ich mal zu Hause und mal auf der Arbeit, ab und an auch unterwegs bearbeite. Auf der Arbeit gibt es ein pserver-basiertes CVS Repository. Nun würde ich gerne auch unterwegs und zu Hause eine Versionierung haben, um Zwischenstände sichern zu können. Dafür böte sich wohl ein lokales Repository auf dem Notebook an. Ziel ist es, unterwegs auch Zwischenstände commiten zu können und dann in der Firma wenigstens den Endstand, idealerweise auch die Zwischenstände in das Master-Repository zu übernehmen.
Auf Slashdot hat gerade jemand was von einer gepatchten CVS-Version, die mehrere Repositories unterstützt, geschrieben. Kennt die jemand? Ausserdem könnte ich mir vorstellen, dass es Tools gibt, die in den CVS Unterverzeichnissen rumpatchen, um einen Tree auf ein anderes Repository umzuschalten, damit wäre mir für's erste auch geholfen, vorausgesetzt es funktioniert zuverlässig. Hat da vielleicht wer 'nen Tip?
-- twm
arch -- ThomasWaldmann 2003-11-13 08:37:36 Soweit ich das sehen kann, ist arch ein von cvs unabhängiges Sourcecodeverwaltungsprogramm, das nicht auf ein existierendes cvs Repository zugreifen kann. Insofern hilft es mir nicht weiter, da eine Voraussetzung ist, dass ich das Repository in der Firma verwenden kann, welches nunmal cvs basiert ist. Oder schlägst Du vor, cvs und arch parallel zu verwenden? -- twm Ich mach das derzeit genau so. MoinMoin hat ein offizielles CVS, entwickeln tue ich aber mit tla. Ein Branch in tla ist dabei immer synchronisiert mit dem offiziellen cvs. So kann man beides gleichzeitig nutzen. Steht übrigens auch in der tla-Doku, wie das genau geht. -- ThomasWaldmann 2003-11-16 13:29:55
Update: MoinMoin nutzt inzwischen Mercurial - und steht damit nicht alleine, auch OpenSolaris und weitere große Projekte nutzen es. Außerdem gibt es für alle Linux-Kernel-Entwickler, die Git nicht mögen, einen Zugang per Mercurial Alternativ kann man auch Bazaar-NG empfehlen, das benutzt Ubuntu intern, von der Geschwindigkeit kommt es aber an Mercurial noch nicht heran. Ich würde heutzutage eines der beiden genannten Versionskontrollsysteme verwenden, nur aus Gründen der Kompatibilität noch Subversion evtl. (man kann auch beides parralell laufen lassen, oder sagen wir, synchronisieren, z.B. mit Tailor) -- MarkusMajer
KategorieVersionsKontrollSystem
diese Seite heißt "cvs" und nicht "CVS", weil CVS nämlich zur Verwaltung ein Verzeichnis "CVS" benutzt - daher ist der Seitenname in Kleinbuchstaben geschrieben, um Konflikte zwischen dem Dateinamen der Seite und diesem Verzeichnis zu vermeiden. (1)