Das Concurrent Versions System (CVS)



Ähnliche Dokumente
CVS. The open standard for version control. (Concurrent Versions System) Maik Zemann CVS

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Einführung in Subversion

Proseminar Unix-Tools CVS Daniel Weber & Zhen Zhang Betreuer: Volker Baier

Versionsverwaltung GIT & SVN. Alexander aus der Fünten. Proseminar: Methoden und Werkzeuge, SS Lehrstuhl i9, Prof. Dr. T.

an Hand eines Beispiels Konsole

8. Dokumentenverwaltung mit CVS eine Einführung

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

CVS-Einführung. Sebastian Mancke,

Möglichkeiten des Parallelbetriebs der VR-NetWorld Software Parallelbetrieb VR-NetWorld Software 4.4x und Version 5.0 ab der 2. Beta!

Software Engineering in der Praxis

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Arbeiten mit UMLed und Delphi

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

Speicher in der Cloud

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

git & git-flow Jens Sandmann Warpzone Münster e.v. Jens Sandmann (WZ) git & git-flow / 31

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Concurrent Versions System (CVS)

FS cs108 Programmierpraktikum Subversion. Lukas Beck Cedric Geissmann Alexander Stiemer

Dokumentenverwaltung

Prodanet ProductManager WinEdition

Elexis-BlueEvidence-Connector

Punkt 1 bis 11: -Anmeldung bei Schlecker und 1-8 -Herunterladen der Software

Print2CAD 2017, 8th Generation. Netzwerkversionen

Wie Sie mit Mastern arbeiten

Enigmail Konfiguration

AutoTexte und AutoKorrektur unter Outlook verwenden

FRILO-Aktuell Ausgabe 2/2013

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Professionelle Seminare im Bereich MS-Office

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

GITS Steckbriefe Tutorial

Wir machen neue Politik für Baden-Württemberg

Team- Entwicklung unter Eclipse

Sourcecodeverwaltung

CVS - Begriffe. Einführung in CVS

Einführung Git Interna Workflows Referenzen. Git. Fast Version Control System. Michael Kuhn

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

> Soft.ZIV. Maple Mathematisches Software System

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Microsoft PowerPoint 2013 Folien gemeinsam nutzen

Tipps und Tricks zu den Updates

Abschluss Version 1.0

Wie halte ich Ordnung auf meiner Festplatte?

CodeSaver. Vorwort. Seite 1 von 6

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Kurzanleitung zu. von Daniel Jettka

Zwischenablage (Bilder, Texte,...)

AutoCAD Dienstprogramm zur Lizenzübertragung

Statuten in leichter Sprache

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Installationsanleitung für OpenOffice.org Sprachpakete

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Datenübernahme in ein Produkt der Lexware premium, professional oder plus line

Einstellen der Makrosicherheit in Microsoft Word

Informationen zur Verwendung von Visual Studio und cmake

Stand: Adressnummern ändern Modulbeschreibung

Informatik Grundlagen, WS04, Seminar 13

Import und Export von Übergängern

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Barcodedatei importieren

2) Geben Sie in der Anmeldemaske Ihren Zugangsnamen und Ihr Passwort ein

Objektorientiertes Programmieren mit Suse Linux

Sage Treuhandaustausch onesage Version 2.2

Arbeitsabläufe FinanzProfiT Version 4.25

Informationen zum neuen Studmail häufige Fragen

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Schritt für Schritt Anleitung zur Installation des Programmpaketes HBS + EASYHBS + KSL

NEUES BEI BUSINESSLINE WINDOWS

Die Projek*ools. Files, Git, Tickets & Time

Datenbanken Kapitel 2

Abwesenheitsnotiz im Exchange Server 2010

Versionsverwaltung für die KU Betriebssysteme. Eine Einführung

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

BELIEBIG GROßE TAPETEN

Einfügen von Bildern innerhalb eines Beitrages

Backup der Progress Datenbank

Empfehlungen zur Nutzung der CD zum Buch: Klee & Wiemann: Beweglichkeit und Dehnfähigkeit. Schorndorf: Hofmann,

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Präventionsforum+ Erfahrungsaustausch. HANDOUT GRUPPEN-ADMINISTRATOREN Anlage zum Endnutzer-Handbuch. Stand: Änderungen vorbehalten

Updatehinweise für die Version forma 5.5.5

Dokumentation zur Versendung der Statistik Daten

s aus -Programm sichern Wählen Sie auf der "Startseite" die Option " s archivieren" und dann die entsprechende Anwendung aus.

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Neues Software Update Release

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Eine Einführung in die Installation und Nutzung von cygwin

Medea3 Print-Client (m3_print)

Software Release Notes

Handbuch ECDL 2003 Basic Modul 6: Präsentation Diagramm auf einer Folie erstellen

Info-Veranstaltung zur Erstellung von Zertifikaten

II. Daten sichern und wiederherstellen 1. Daten sichern

INSTALLATION VON INSTANTRAILS 1.7

Bilder zum Upload verkleinern

Transkript:

Versionenkontrolle Das Concurrent Versions System (CVS) Vortrag im Proseminar Unix Tools 1 Markus Sander sander@in.tum.de 07.06.2005

Versionenkontrolle Gliederung 1 Versionenkontrolle 2

Versionenkontrolle Versionenkontrolle 1 Definition Versionenkontroll-Software verwaltet Aktualisierung von Dateien (i.a. Quellcode). 2 Motivation Änderungen am Quellcode können neue Fehler einführen. Diese könnten lange unerkannt bleiben. Wann wurde der Fehler eingeführt? Von wem? Wie sah der korrekte Code aus? Koordination vom gemeinsamen Arbeiten mehrerer Entwickler am gleichen Projekt ist schwierig.

Versionenkontrolle Lösung: Concurrent Versions System (CVS) https://www.cvshome.org CVS speichert Änderungen an Dateien. Die fehlerhafte Änderung kann gefunden werden. Der korrekte Code kann nachgeschlagen werden. CVS verwaltet auch die Distribution der Dateien. So, dass mehrere Entwickler an selber Datei arbeiten können. CVS kann Änderungen in disjunkten Teilen einer Datei automatisch verschmelzen.

Versionenkontrolle CVS-Terminologie Jede Datei (und nur Dateien) unter Versionenkontrolle besitzt eine Revisionsnummer. Jede vorgenommene Änderung an einer Datei erhöht ihre Revisionsnummer, z.b. von 1.1 auf 1.2. Release: Software-Version. CVS hat kein Verständnis von Releases. Man spricht häufig von Version, wenn man eigentlich entweder Revision oder Release meint. CVS meidet mehrdeutiges Version.

Aufruf Versionenkontrolle Allgemeiner CVS-Aufruf: cvs [global-opt] command [command-opt] [command-args] Beispiele für globale Optionen und Befehle werden wir in Kürze sehen. Die gebräuchlichsten finden sich auch in der Kurzreferenz im Handout.

Versionenkontrolle Das CVS-Repositorium bzw. engl: repository CVS-Repositorium: Verzeichnisbaum, in dem verwaltete Dateien und Verzeichnisse abgelegt werden. Alle Revisionen aller Dateien befinden sich dort, aber in kompakter Form. Es werden nicht komplette Dateien gespeichert, sondern Änderungen gegenüber der jeweils vorigen Revision. Somit kann jederzeit jede beliebige Revision synthetisiert werden.

Versionenkontrolle $CVSROOT Spezifizieren eines CVS-Repositoriums Einige CVS-Befehle interagieren mit (genau) einem Repositorium. Dann muss CVS die Adresse mitgeteilt werden: Mit der globalen Option -d, oder über Umgebungsvariable $CVSROOT (wobei die Kommandozeile die höhere Priorität hat).

Versionenkontrolle Pfad zum Repositorium Spezifizieren eines CVS-Repositoriums Ein Pfad zu einem Repositorium hat die Form [:method:] [[[user][:password]@]hostname[:port]] /absolute/path/to/repository method gibt die Zugriffsmethode an, z.b. pserver oder ext. CVS via SSH: Setze CVS_RSH = /usr/bin/ssh und method = ext

cvs init Erstellen eines Repositoriums Versionenkontrolle Ein Repositorium wird erstellt: $ mkdir cvsroot $ export CVSROOT= pwd /cvsroot $ cvs init $ cd cvsroot $ ls -a./../ CVSROOT/ Im CVSROOT/ Unterverzeichnis werden Administrationsdateien gespeichert. Für einfache Anwendungen sind die Standardwerte ausreichend.

Versionenkontrolle Einfache Module...werden durch ledigliches Erstellen eines Verzeichnisses definiert Ein Modul ist eine im Repositorium verwaltete Menge an Dateien und Verzeichnissen. Jedes (direkte) Unterverzeichnis des Repositoriums fungiert als Modul. Das gilt insbesondere auch für das CVSROOT/ Unterverzeichnis. Die Konfigurationsdateien stehen also ebenfalls unter Versionenkontrolle.

cvs checkout Erstellen einer Arbeitskopie Versionenkontrolle Direktes Arbeiten am Repositorium gäbe genau die Probleme, die wir mit CVS lösen möchten. Deshalb muss eine Arbeitskopie (auch: sandbox) verwendet werden. Arbeitskopien dürfen nicht innerhalb des Repositoriums erstellt werden.

cvs checkout Erstellen einer Arbeitskopie Versionenkontrolle Eine Arbeitskopie des Moduls mod wird im aktuellen Verzeichnis erstellt: $ cvs checkout mod cvs checkout: Updating mod U mod/file1 $ ls -a mod/./../ CVS/ file1 Im CVS/ Unterverzeichnis ist der Pfad zum Repositorium gespeichert. Weitere Operationen auf mod sind nicht mehr auf $CVSROOT angewiesen. Das U vor einem Dateinamen zeigt an, dass die jeweilige Datei in der Arbeitskopie jetzt Up-to-date ist.

Versionenkontrolle cvs add Hinzufügen von Dateien und Verzeichnissen Eine Datei file2 wird zum Hinzufügen vorgemerkt: $ ls -a./../ CVS/ file1 $ > file2 $ cvs add file2 cvs add: scheduling file file2 for addition cvs add: use cvs commit to add this file permanently Verzeichnisse werden analog zum Hinzufügen markiert.

Versionenkontrolle cvs add Hinzufügen von Dateien und Verzeichnissen Der hinzuzufügende Dateisystemeintrag muss existieren, darf aber nicht bereits unter Versionenkontrolle stehen. Binärdateien brauchen eine Sonderbehandlung: Die Befehlsoption -kb. Denn: CVS konvertiert automatisch zwischen UNIX- und Windows-Newlines. Binärdateien können Schlüsselworte enthalten (-> Schlüsselwortsubstitution).

cvs commit Ablegen von Änderungen Versionenkontrolle Vorgenommene Änderungen werden eingereicht: $ cvs commit -m Added: mod/file2 cvs commit: Examining. Checking in mod; /path/to/cvsroot/mod/file2,v <- file2 initial revision: 1.1 done Dateien müssen vor dem Einreichen aktualisiert werden. Sonst könnten Änderungen anderer Entwickler überschrieben werden.

cvs commit Ablegen von Änderungen Versionenkontrolle Eine Lognachricht muss angegeben werden. Wenn nicht durch Option -m, dann wird $CVSEDITOR, $EDITOR, $VISUAL oder vi gestartet.

Versionenkontrolle cvs update Verschmelzen von Änderungen anderer Entwickler mit der Arbeitskopie Ein Arbeitsverzeichnis wird aktualisiert: $ cvs update -dp cvs update: Updating. file1 könnte seit dem letzten update verändert worden sein. Dann wird eine Verschmelzung versucht. Lokale Änderungen gehen dabei nicht verloren.

Versionenkontrolle cvs update Verschmelzen von Änderungen anderer Entwickler mit der Arbeitskopie Erster Fall: U file1 file1 war unverändert und kann auf den neuesten Stand gebracht werden. Zweiter Fall: M file1 file1 enthielt lokale Änderungen, die der Aktualisierung nicht im Wege standen. Dritter Fall: C file1 file1 enthielt lokale Änderungen, die der Aktualisierung im Wege standen.

Versionenkontrolle cvs update Verschmelzen von Änderungen anderer Entwickler mit der Arbeitskopie file1 enthält nun einen Konflikt. Die aktuelle Revision aus dem Repositorium ist inkompatibel zur Arbeitskopie. In file1 befinden sich an Konfliktpunkten, durch Marker getrennt, die beiden Revisionen. Konflikte müssen manuell aufgelöst werden. Dann kann die Kopie eingecheckt werden. Die lokale Datei vor dem update ist in.#file1.<rev> oder #file1.<rev> gespeichert.

cvs update Manuelles Auflösen von Konflikten Versionenkontrolle Es sei dies die Revision 1.4 einer Datei driver.c: void main() { parse(); if (nerr == 0) gencode(); else fprintf(stderr, No code generated.\n ); exit(nerr == 0? 0 : 1); }

cvs update Manuelles Auflösen von Konflikten Versionenkontrolle Revision 1.6 von driver.c: int main(int argc, char **argv) { parse(); if (argc!= 1) { fprintf(stderr, tc: Need 0 args.\n ); exit(1); } if (nerr == 0) gencode(); else fprintf(stderr, No code generated.\n ); exit(!!nerr); }

cvs update Manuelles Auflösen von Konflikten Versionenkontrolle Dies sei unsere Arbeitskopie von driver.c, basierend auf Revision 1.4: void main() { init_scanner(); parse(); if (nerr == 0) gencode(); else fprintf(stderr, No code generated.\n ); exit(nerr == 0? SUCCESS : FAILURE); }

cvs update Manuelles Auflösen von Konflikten Versionenkontrolle Wir führen ein update aus: $ cvs update driver.c /path/to/cvsroot/module/driver.c,v retrieving revision 1.4 retrieving revision 1.6 Merging differences between 1.4 and 1.6 into driver.c rcsmerge warning: overlaps during merge cvs update: conflicts found in driver.c C driver.c Nun betrachten wir den Inhalt von driver.c nach dem update:

Versionenkontrolle int main(int argc, char **argv) { init_scanner(); parse(); if (argc!= 1) { fprintf(stderr, tc: Need 0 args.\n ); exit(1); } if (nerr == 0) gencode(); else fprintf(stderr, No code generated.\n ); <<<<<<< driver.c exit(nerr == 0? SUCCESS : FAILURE); ======= exit(!!nerr); >>>>>>> 1.6 }

Danke Anhang Vielen Dank für die Aufmerksamkeit.

Danke Anhang Konflikte: Reserved oder unreserved checkouts? Branching Konflikte Diskussion Offenbar machen Konflikte Arbeit. Wäre es nicht besser, es könnte jede Datei nur von einem Entwickler gleichzeitig bearbeitet werden (reserved checkouts)? Andere Versionenkontrollsysteme erzwingen das. CVS unterstützt es auch. Dies behindert Entwickler, die disjunkte Teile einer Datei ändern wollen. Entwickler vergessen gerne, locks wieder frei zu geben.

Danke Anhang Konflikte: Reserved oder unreserved checkouts? Branching Konflikte Diskussion Ernste Konflikte treten nur auf, wenn Entwickler bzgl. des Designs uneinig sind. Kommunikation und Planung verhindern ernste Konflikte. Häufiges Synchronisieren kann zu einfacher aufzulösenden Konflikten führen. Aber: Es gibt Situationen, in denen unreserved checkouts immer fehl am Platz sind: z.b. wenn es kein Werkzeug zum Verschmelzen von Änderungen gibt.

Danke Anhang Konflikte: Reserved oder unreserved checkouts? Branching Branching Parallele Entwicklungsstränge Motivation: Release 1.0 unserer Software wurde herausgegeben. Ein Kunde entdeckt kritischen Fehler. Die Entwicklung in Richtung Release 2.0 ist momentan zu instabil. Lösung: Starte ab Release 1.0 neuen Entwicklungszweig, der die Änderungen für Release 2.0 nicht enthält. Repariere hier die Fehler. Bevor Release 2.0 herausgegeben wird, verschmelze die Änderungen des Patch-Zweiges mit dem Hauptzweig.

Danke Anhang Konflikte: Reserved oder unreserved checkouts? Branching Branching Parallele Entwicklungsstränge Bezeichne die Revisionen vom date mit rel-1-0: $ cvs tag -D date rel-1-0 Starte neuen Entwicklungszweig rel-1-0-fixes: $ cvs tag -r rel-1-0 -b rel-1-0-fixes Erstelle neue Arbeitskopie für den Zweig: $ cvs checkout -r rel-1-0-fixes module

Danke Anhang Konflikte: Reserved oder unreserved checkouts? Branching Branching Parallele Entwicklungsstränge Neue Änderungen werden nur dem Zweig rel-1-0-fixes hinzugefügt. Verschmelze Zweig rel-1-0-fixes mit dem main trunk: $ cd main-trunk-sandbox $ cvs update -dp $ cvs update -j rel-1-0-fixes

Danke Anhang Konflikte: Reserved oder unreserved checkouts? Branching Branching Parallele Entwicklungsstränge Mehrfaches Verschmelzen eines Zweiges problematisch. Manche Änderungen würden öfter mit Arbeitskopie verschmolzen werden. Lösung: Nachdem ein Zweig mit dem main trunk verschmolzen wurde, weise ihm ein tag zu, z.b. rel-1-0-fixes-latest-merge. Verschmelze nur die Änderungen seit der letzten Verschmelzung: $ cvs update -j rel-1-0-fixes-latest-merge -j rel-1-0-fixes