Studienprojekt WS 08/09 Richard Planert

Werbung
CVS
Studienprojekt WS 08/09
Richard Planert
Concurrent Version System
Ein Versionsverwaltungssystem
• Wichtig: Veränderungen nachvollziehen zu können
• um nicht jede Änderung selbst speichern zu müssen
CVS zur Verwaltung aller Arten von Textdateien geeignet
Hauptaufgaben:
•
•
•
•
Protokollierung der Änderungen
Wiederherstellung alter Versionen einzelner Daten
Koordinierung des gemeinsamen Zugriffs
Gleichzeitige Entwicklung
Repository/Archiv
Zentrales Archiv (Hauptkopie eines Projektes)
• verfolgt zwei scheinbar unabhängige Ansätze
Historienverwaltung
Zusammenarbeit
• speichert nur die Unterschiede zwischen zwei Revisionen um
Speicherplatz zu sparen
• Ist nichts weiter als ein Datei-/Verzeichnisbaum, der auf einem
Server gespeichert wird
• Kein Sperren (locking) von Dateien
CVS-Server
• Enthält ein Verzeichnis für jedes Projekt
• Jede Datei wird im jeweiligen Verzeichnis mit ihrem Namen
gespeichert
• Allerdings mit Zusatzinformationen:
•
•
•
•
•
•
Allg.Beschreibung der Datei
Unterschiede zu vorheriger Revision
Dem Zeitpunkt jeder Änderung
Kommentare des Entwicklers zu Änderung
Name des Entwicklers
Eine Revisionsnummer
Client-Server
CVS ist eine Client-Server-Anwendung
• CVS-Client greift auf das CVS-Server-Archiv zu
• Das Repository wird von einem CVS-Server verwaltet.
• Die Benutzer verwenden einen CVS-Client, der wiederum über
den CVS-Server auf das Repository zugreift.
• Übertragen von Dateien ausschließlich per CVS-Kommandos
Arbeitskopie
Lokale Arbeitskopie
• Stand eines Projektes in Form eines Verzeichnisbaums aus
aktuellen Dateien erzeugen kann
• Ein Entwickler A arbeitet frei an seiner Arbeitskopie
• Zum gleichen Zeitpunkt können auch andere an ihrer eigenen
Kopie arbeiten
• Da sie voneinander unabhängig keine Konflikte
• Nur an ihr werden direkt Veränderungen vorgenommen
CVS-Begriffe
Import
• Übertragen Textdateien ins Archiv
• Existierende Dateien unter die Kontrolle von CVS stellen
Checkout
• ein Projekt aus dem Archiv in die lokale Arbeitskopie übertragen
Commit = Checkin
•
Lokale Änderungen der Arbeitskopie an das Archiv senden
Update
• die lokale Arbeitskopie aktualisieren
• Veränderungen aus dem Archiv in die eigene Kopie einfließen lassen
Revision
• Version einer Datei
• Die Revisionsnummer wird automatisch erhöht sobald neue Revision
ins Archiv abgelegt wird
Ablauf
Konflikt
• wenn zwei Entwickler den gleichen Teil einer Datei bearbeiten
und „committen“
• Zusammenführen (Mergen) von Änderungen, teils automatisch
möglich
bei komplexen Änderungen bzw. Scheitern des
Zusammenführens muss der Nutzer eingreifen (Konflikt)
• Wird ein Konflikt angezeigt, ist ein „commit nicht möglich
Konflikt auflösen
Erst dann hochladen
• Veränderungen sollten unter den Entwicklern abgesprochen
werden
Ablauf (2)
Marken
Mit einer Marke, oder auch Tag, kann man die
zusammengehörenden Revisionen der Dateien markieren
So kann man lauffähige Versionen markieren
• Später darauf zugreifen
• Arbeitskopie mit „haftender“ Marke kann nicht aktualisiert werden
• Änderungen können nicht ins Archiv (Vergangenheit)
Verzweigungen
(Engl.: Branches)
CVS erlaubt durch Verzweigungen das Verändern der
Vergangenheit
Parallele Weiterentwicklung, ohne dass die Hauptentwicklungslinie
davon beeinflusst wird
Üblicherweise wird nach Abschluss der Änderungen wieder
reintegriert, auch merge genannt
Verzweigungen (2)
Zweige starten immer an der
Wurzel, in Verbindung mit einer
Marke
CVS-Syntax
Allgemein:
Cvs [globale Optionen] Kommando [Kommandooptionen] [Dateien]
Zugriff auf ein Archiv:
• Noch keine lokale Arbeitskopie, wohin soll sich CVS wenden?
• Lokales Archiv:
cvs -d /usr/local/archiv Kommando
• Netzwerk bzw. Internet:
:Zugriffsmethode: Benutzer @ Rechner:Verzeichnis Kommando
Z:B.:
cvs -d :pserver:[email protected]:/usr/local/archiv login
Andere Zugriffsmethode: z.B. ext (ssh, rsh)
Neues Projekt
Cvs import -m "Kommentar" Projektname Hersteller-Marke Versions-Marke
Beispiel:
>Cd testprojekt/
>ls
Test.java
unterverzeichnis/
>cat Test.java
public class Test {
public static void main(String[] args) {
System.out.println("Hallo Welt");
}
}
>cvs import –m "initaler Import" testprojekt benutzer start
N testprojekt/Test.java
Cvs import: Importing
/usr/local/archiv/testprojekt/unterverzeichnis
N testprojekt/unterverzeichnis/Test2.java
No conflicts created by this import
>
•
Das Projekt wird unter dem Namen „testprojekt“ in das Archiv importiert
Arbeitskopie
Cvs checkout Projektname
• Dabei wird im aktuellen Verzeichnis ein Ordner mit dem Namen
des Projekts angelegt
Beispiel:
>cvs checkout testprojekt
Cvs checkout: Updating testprojekt
U testprojekt/Test.java
Cvs checkout: Updating testprojekt/unterverzeichnis
U testprojekt/unterverzeichnis/Test2.java
>ls testprojekt/
Test.java
CVS/
unterverzeichnis/
Im automatisch erstellten Ordner CVS befinden sich Verwaltungsinformationen
Aktualisieren
Cvs update [-r Revision] [-D Datum] [-A] [Dateien]
Cvs –q update
• (Auslassen einiger unwichtiger Meldungen)
Cvs update –d
• (mit neuen Verzeichnissen)
Beispiel:
>cvs –q update
M testprojekt/Test.java
U testprojekt/unterverzeichnis/Test2.java
Archiv
Änderungen in der lokalen Arbeitskopie in das Archiv übernehmen
Cvs commit –m "Kommentar" [Dateien]
Beispiel:
>cat Test.java
public class Test {
public static void main(String[] args) {
System.out.println("Hallo Welt");
System.out.println(„Neu");
}
}
>cvs –q update
M Test.java
>cvs commit –m „Erweiterung“
Cvs commit: Examining
Cvs commit: Examining unterverzeichnis
Checking in Test.java;
/usr/local/archiv/testprojekt/Test.java,v <-- Test.java
New revision: 1.2; previous revision: 1.1
done
Konflikt
• Zu einem Konflikt kommt es bei einem update, wenn die lokal
veränderte Datei bereits im Archiv geändert wurde
Beispiel:
>cvs update Test.java
RCS file: /usr/local/archiv/testprojekt/Test.java
Retrieving revision 1.2
Retrieving revision 1.3
Merging differences between 1.2 and 1.3 into Test.java
Rcsmerge: conflict during merge
Cvs update: conflicts found in Test.java
C Test.java
• Der nicht überlappende Text wird zusammengemischt
• CVS fügt beide Veränderungen wie folgt in die Datei ein:
[...]
System.out.println("Hallo Welt");
System.out.println(„Neu");
<<<<<< Test.java
System.out.println(„Neu3");
======
System.out.println(„Neu2");
>>>>>> 1.3 (letzte Revisionsnummer des Archivs)
[...]
Andere CSV-Kommandos
Den Status einer Datei
• Cvs status [Datei]
Grober Überblick über Veränderungen
• Cvs log [Datei]
Dateien hinzufügen
• Cvs add Datei
Marken/ Tag anheften bzw. Zweig erstellen
• Cvs tag [-b] Markenname [Dateien]
Arbeitskopie auf die Wurzel des Zweiges setzen
• Cvs update –r Zweig-Marke
Zweige verschmelzen
• Cvs update –j Zweig-Marke
Herunterladen