Versionskontrolle Software-Versionen Was habe ich geändert? Alles Quatsch, alles zurück... Wie fixe ich den Bug in Version 1.0 im Feld? Wie integriere ich den gerade eingetroffenen Bugfix für Version 3.6 in meine Version 3.7? Welche Versionen welcher Module gehören zu Version 2.1 des Softwarepakets? Versionskontrollsysteme veraltet: SCCS (Source Code Control System) RCS () CVS (Concurrent Versions System) 2005 AG Rechner netze 2-rcs.1
Versionskontrolle Was behält man unter Versionskontrolle Alles von Menschen Erdachte Source-Files Konfigurationsdokumente (z. B. Makefiles) Dokumentation Testdaten/-skr ipte Was nicht? Alles von Maschinen Generier te Ausnahme eventuell: Externe.o-Files,.ps-Files, etc. Genauer : Alles, was make wiederherstellen kann 2005 AG Rechner netze 2-rcs.2
RCS-Übersicht RCS verwaltet Change Histor y Alle Revisions eines manuell editierten Files über seine Lebensdauer Abspeicher n alter Revisions in wenig Platz Abfrage von Änderungsmeldungen (Log-Messages) Besetzen von Files für Änderungen (Locking) Gleichzeitigen Schreibzugriff verhinder n Änder ungsbäume (alte Revisions sind änderbar) Zusammenfügen von Entwicklungslinien; War nen bei Überlappungen Einbetten von Releaseinfor mationen in Files RCS hat wenig Unterstützung für Beziehungen zwischen Files Einfr ieren von Konfigurationen 2005 AG Rechner netze 2-rcs.3
Erste Schritte mit RCS Bevor eslosg eht RCS-Verzeichnis anlegen: mkdir RCS Nach dem Bearbeiten eines Files Neue Revision des File in RCS-Verzeichnis einchecken : ci main.cc Vordem Bearbeiten oder Anschauen Letzte Revision des Files auschecken co main.cc # Zum Anschauen co -l main.cc # Zum Bearbeiten Änderung en auflisten rcsdiff main.cc 2005 AG Rechner netze 2-rcs.4
Check-in RCS-Kommando: ci Versionsfile wird aktualisiert RCS/file.cc,v Arbeitskopie wird gelöscht Falls gleich weitergearbeitet werden soll (Abkürzung ci + co): ci -u file.cc ci -l file.cc # Anschauen, Übersetzen, etc. # Editieren Revisions-Nummer wird um eins erhöht 1.1, 1.2,... RCS speichert Delta zur vorhergehenden Revision Liste von Editier-Kommandos 2005 AG Rechner netze 2-rcs.5
Check-in RCS-Kommando: ci Erstes Einchecken: Kurzbeschreibung wird angeforder t Einchecken nach Änderung: Log-Message eingeben ci -l file.cc RCS/file.cc,v <-- file.cc new revision: 1.5; previous revision: 1.4 enter log message, terminated with single. or EOF >> Memory-Leak in Funktion buf_alloc() beseitigt. >>. 2005 AG Rechner netze 2-rcs.6
Locking Schutz vor Zugriffskonflikten Programmierer A, Programmierer in Beditieren Revision 1.7 von file.cc Beide checken File ein Problem! Lösung: Revision locked oder unlocked auschecken Auschecken locked Nur einer darf eine Revision eines Files locken Nur Inhaber des Locks darf Revision wieder einchecken File-Per missions er möglichen Schreibzugriff: Editieren Auschecken unlocked Immer erlaubt Revision kann nicht wieder eingecheckt werden File-Per missions er lauben nur Lesezugriff: Anschauen, Ausdr ucken,... 2005 AG Rechner netze 2-rcs.7
Locking Revision auschecken zum Bearbeiten: co -l file.cc ci -l file.cc # Auschecken mit Lock # Einchecken; sofort wieder auschecken Revision auschecken zum Anschauen: co file.cc co -u file.cc ci -u file.cc # Auschecken ohne Lock # Einchecken; sofort wieder auschecken Revision nachträglich locken: rcs -l file.cc # Falls bei co vergessen... Lock brechen: rcs -u file.cc # Schickt E-Mail an Lock-Inhaber 2005 AG Rechner netze 2-rcs.8
Versionskontrolle in Emacs Emacs-Unterstützung für RCS Beim ersten Editieren File für RCS registrieren: C-x v i (vc-register) Vor und nach dem Editieren: C-x C-q (vc-toggle-read-only) Checkt File ein oder aus (locked!) Schaltet read-only ein oder aus Forder t Log-Message in neuem Buffer an C-c C-c (vc-finish-log-entr y) C-x v i C-x C-q Neu RO RW C-x C-q Te xt... C-c C-c 2005 AG Rechner netze 2-rcs.9
Versionskontrolle in Emacs Weitere nützliche vc-kommandos: Unterschiede zur letzten checked-in Revision auflisten: C-x v = (vc-diff) = wie vergleichen Buffer mit Änderungen erscheint Verschwinden lassen mit C-x 0 Change-Histor y anzeigen: C-x v l (vc-pr int-log) Buffer mit allen Revision-Nummer n und Log-Messages erscheint Backup-Files in Emacs Kein Backup-File, wenn File unter Versionskontrolle 2005 AG Rechner netze 2-rcs.10
Keywords Keyword-Ersetzung bei check-out $Revision...$ Revision-Nummer $Id...$ Filename, Revision, Datum, Autor,... $Log...$ Gesammelte Log-Message vom check-in Nützlich in Kommentaren am Anfang des Files: #!/usr/local/bin/perl # # Oliver Laumann <net@informatik.uni-bremen.de> # # $Revision: 1.4 $... Keywords in Object-Files: static char rcsid[] = "$Id$"; Keywords auflisten mit ident 2005 AG Rechner netze 2-rcs.11
Revisions RCS-Revision-Baum ci file ci -r2 file 1.1 1.2 1.3 2.1 2.2 trunk co -r1.3 file emacs file ci -r1.3.1 file 1.3.1.1 1.3.1.2 "final" ci -nfinal file branch 2005 AG Rechner netze 2-rcs.12
Weitere RCS-Kommandos rcsdiff Unterschiede zwischen zwei Revisions rcsdiff c erzeugt context diff Nützlich für patches rlog Auflisten der Change History ident Auflisten von RCS-Keywords in Executables, Object-Files rcsmerge Zusammenfügen von zwei Revisions 2005 AG Rechner netze 2-rcs.13
CVS cvs - Concurrent Versions System Verwaltet Verzeichnisse mit dazugehöhrigen Unterverzeichnissen Ein Repository und mehrere Wor king-director ies Einge Befehle: cvs init legt ein Repository an cvs import fügt ein Ver yeichnis zum Repository hinzu cvs co checkt as dem Repository aus cvs add fügt Dateien hinzu cvs ci checkt wieder ein cvs update holt sich aktuellere Infor mationen aus dem Repository Weitere Befehle und Parameter : man cvs / info cvs Emacs-Unterstützung ähnlich wie RCS (VC = Version Control) 2005 AG Rechner netze 2-rcs.14