Subversion: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 11: Zeile 11:
Wir verwenden [[Subversion]] im Sopra um genau diese Punkte zu ermöglichen. Jede [[Gruppeneinteilung|Gruppe]] erhält ihr eigenes [[#Repository|Repository]] und hoffentlich (unsere Admins arbeiten daran) auch ein [[Trac]], um ihr Projekt zu verwalten.  
Wir verwenden [[Subversion]] im Sopra um genau diese Punkte zu ermöglichen. Jede [[Gruppeneinteilung|Gruppe]] erhält ihr eigenes [[#Repository|Repository]] und hoffentlich (unsere Admins arbeiten daran) auch ein [[Trac]], um ihr Projekt zu verwalten.  


[[Subversion]] besitzt eine Client-Server-[[Architektur]], sodass man einen beliebigen [[Subversion]]-[[#Clients|Client]] verwenden kann.  
[[Subversion]] besitzt eine Client-Server-[[Architektur]], sodass man neben dem Original-[[Subversion]]-Client<ref>[http://subversion.tigris.org/ offizielle Seite] des [[Subversion]]-Projekts</ref> auch einen beliebigen [[Subversion]]-[[#Clients|Client]] verwenden kann.  
Grundsätzlich besteht eine [[Versionsverwaltung]] mit [[Subversion]] aus  
Grundsätzlich besteht eine [[Versionsverwaltung]] mit [[Subversion]] aus  
* einem [[#Repository|Repository]] auf einem zentralen Server, das alle [[#Revision|Revisionen]] des Projekts enthält und  
* einem [[#Repository|Repository]] auf einem zentralen Server, das alle [[#Revision|Revisionen]] des Projekts enthält und  
Zeile 61: Zeile 61:


=== Working Copy updaten ===
=== Working Copy updaten ===
[[Image:update_messages.png|thumb|right|200px|Ein Update-Log mit typischen Status-Meldungen ([[TortoiseSVN]]).]]
Mit dem ''Update'' der [[#Working Copy|Working Copy]] (<tt>SVN Update</tt>) holt man sich die Änderungen der anderen Benutzer auf seinen Rechner. Dabei werden dem Benutzer die einzelnen Änderungen, die durch das Update an seiner [[#Working Copy|Working Copy]] vorgenommen wurden, in einem Update-Log angezeigt. Je nach [[#Clients|Client]] sieht das natürlich verschieden aus, aber die folgenden Aktionen wird man oft zu sehen bekommen<ref>Für eine vollständige Liste siehe http://knaddison.com/technology/svn-status-code-cheat-sheet</ref>:
<table class="default">
<tr><th>Deleted</th><td>Die Datei wurde von einem anderen Benutzer in der Zwischenzeit gelöscht.</td></tr>
<tr><th>Conflicted</th><td>Die Datei ist in einem [[#Conflicts|Conflict]]-Zustand, d.h. seit dem letzen [[#Projekt auschecken|Checkout]] hat ein anderer Benutzer diese Datei geändert und sie wurde außerdem lokal geändert. [[Subversion]] kann diese Änderung nicht automatisch zusammenführen (da z.B. die selbe Zeile geändert wurde). Ein [[#Conflicts|Conflict]] benötigt IMMER Benutzer-Interaktion um aufgelöst zu werden. </td></tr>
<tr><th>Updated</th><td>Die Datei wurde seit dem letzten [[#Projekt auschecken|Checkout]] nicht lokal verändert, aber ein anderer Benutzer hat Veränderungen daran vorgenommen.</td></tr>
<tr><th>Added</th><td>Ein anderer Benutzer hat diese Datei neu hinzugefügt.</td></tr>
<tr><th>Merged</th><td>Seit dem letzen [[#Projekt auschecken|Checkout]] hat ein anderer Benutzer diese Datei geändert und sie wurde außerdem lokal geändert. In diesem Fall konnte [[Subversion]] die Änderungen automatisch zusammenführen (da z.B. der eine Benutzer nur den Anfang der Datei geändert hat, lokal aber nur das Ende geändert wurde)</td></tr>
</table>
=== Working Copy commiten ===
=== Working Copy commiten ===
=== Revert ===
=== Revert ===
Zeile 84: Zeile 95:
=== Links ===
=== Links ===
* [[wikipedia:de:Subversion_(Software)|Subversion]] auf Wikipedia
* [[wikipedia:de:Subversion_(Software)|Subversion]] auf Wikipedia
* Das [http://svnbook.red-bean.com/ Subversion Buch]
* [http://svnbook.red-bean.com/ Version Control with Subversion] - das große [[Subversion]]-Buch online
* [http://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf Cheat-Sheet für Subversion]  


[[Kategorie:Begriffe]]
[[Kategorie:Begriffe]]
[[Kategorie:Tutorials]]
[[Kategorie:Tutorials]]

Version vom 3. Mai 2009, 12:43 Uhr


Subversion (kurz: SVN) ist ein Versionsverwaltungssystem. Es wird verwendet um

  • Änderungen am Projekt zu protokollieren,
  • ältere Versionen wiederherzustellen,
  • das Projekt zu archivieren,
  • gemeinsames Arbeiten auf der selben Datenbasis zu ermöglichen,
  • kurz: es ermöglicht mehreren Entwicklern komfortabler an einem Projekt gemeinsam und gleichzeitig zu arbeiten.

Wir verwenden Subversion im Sopra um genau diese Punkte zu ermöglichen. Jede Gruppe erhält ihr eigenes Repository und hoffentlich (unsere Admins arbeiten daran) auch ein Trac, um ihr Projekt zu verwalten.

Subversion besitzt eine Client-Server-Architektur, sodass man neben dem Original-Subversion-Client[1] auch einen beliebigen Subversion-Client verwenden kann. Grundsätzlich besteht eine Versionsverwaltung mit Subversion aus

  • einem Repository auf einem zentralen Server, das alle Revisionen des Projekts enthält und
  • vielen Working Copies auf den Computern der Entwickler, die jeweils nur eine Revision des Projekts zusammen mit den lokalen Änderungen des Entwicklers darstellen.

zentrale Begriffe

Revision

Der Repository-Browser von TortoiseSVN mit markierter Revisionsspalte

Eine Revision ist ein atomarer Zustand des Repositorys, der für jede Datei und jedes Verzeichnis einzeln gespeichert und durch eine fortlaufende Nummer ausgedrückt wird. Die aktuelle Revision (auch: Die Head-Revision) eines Repositorys ist dabei die durch die letzte Änderung des Repositorys vergebene Zahl.

Jeder Commit eines Benutzers führt zu so einer Änderung am Repository und erhöht die Revision um 1.

Repository

Das Repository ist der zentrale Verzeichnisbaum, in dem sich alle unter Versionsverwaltung stehenden Dateien befinden. Das Repository kann alle Änderungen, die jemals an diesen Dateien oder Verzeichnissen vorgenommen wurden

  • nachvollziehen (d.h. angeben, welcher Autor welche Änderung durchgeführt hat),
  • rückgängig machen.

Working Copy

Die Working Copy (Arbeitskopie) ist ein Verzeichnis, das auf dem Rechner des Benutzers liegt und durch einen Checkout des Repositorys angelegt wurde. Es enthält eine Revision des Repositorys zusammen mit den Änderungen, die der Benutzer daran vorgenommen hat. Diese Änderungen können durch einen Commit mit dem zentralen Repository synchronisiert werden.

Die Working Copy kann durch ein Update auf den neuesten Stand (d.h. die neueste Revision) gebracht werden. Dabei können Konflikte entstehen.

Die Working Copy kann auch lokale Änderungen seit der letzen Synchronisation mit Revert rückgängig machen. Das funktioniert nicht nur für die gesamte Working Copy, sondern auch für jede einzelne Datei in ihr.

Mit Checkout und Update kann die Working Copy auch gezielt auf den Stand einer speziellen Revision gebracht werden.

Arbeiten mit Subversion

Wir beschreiben hier kurz und sehr abstrakt die einzelnen Funktionen, die ein Subversion-Client generell zur Verfügung stellt. Die genaue Funktionsweise kann von Client zu Client abweichen.

Projekt importieren

Mit Projekt importieren fügt man ein schon existierendes, nicht unter Versionsverwaltung stehendes, meist lokales, Verzeichnis zum Repository hinzu.

Achtung: Das lokale, hinzugefügte Verzeichnis wird dadurch NICHT zur Working Copy. Will man mit diesem Verzeichnis weiter arbeiten, muss man das Repository auschecken.

Projekt auschecken

Mit Projekt auschecken (SVN Checkout...) erzeugt man eine Working Copy in einem lokalen, leeren Verzeichnis. Diese Funktion wird nur einmal im Leben einer Working Copy verwendet.

Achtung: Auf keinen Fall einen Checkout in ein Verzeichnis machen, das bereits unter Versionsverwaltung steht.

Working Copy bearbeiten

Alle Dateien und Ordner in der Working Copy können nahezu genauso bearbeitet werden, als wäre die Working Copy ein normales Verzeichnis. Man kann Dateien und Verzeichnisse

  • neu anlegen
  • löschen
  • ändern
  • verschieben
  • umbenennen

Manche Veränderungen der Working Copy erfordern jedoch vor dem Commit eine explizite Mitteilung an die Versionsverwaltung. Wenn Dateien oder Verzeichnisse neu angelegt (Add...) oder gelöscht (Delete...) werden, kann das Repository nicht entscheiden, wie es darauf reagieren soll. Neue Dateien müssen nicht zwangsweise unter Versionsverwaltung gestellt werden, auch wenn sie in einer Working Copy liegen. Man könnte sie auch ignorieren. Gelöschte Dateien sollen nicht zwangsweise auch im Repository gelöscht werden, sie könnten auch von dort wiederhergestellt (z.B. mit Update) werden.

Noch größeren Aufwand benötigt das Umbenennen (Rename...) und das Verschieben von Dateien oder Verzeichnissen. Da zusätzliche Informationen mit einzelnen Dateien verknüpft sind, müssen diese Operationen vollständig durch den Client getätigt werden.

AnkhSVN übernimmt diese Arbeiten (zu einem Großteil) für den Benutzer, während man in TortoiseSVN diese Mitteilungen manuell vor einem Commit machen muss. Das Verschieben mit TortoiseSVN ist etwas versteckt, da dieser Befehl nur im Rechtsklick-Drag-and-Drop-Kontextmenü sichtbar ist.

Working Copy updaten

Ein Update-Log mit typischen Status-Meldungen (TortoiseSVN).

Mit dem Update der Working Copy (SVN Update) holt man sich die Änderungen der anderen Benutzer auf seinen Rechner. Dabei werden dem Benutzer die einzelnen Änderungen, die durch das Update an seiner Working Copy vorgenommen wurden, in einem Update-Log angezeigt. Je nach Client sieht das natürlich verschieden aus, aber die folgenden Aktionen wird man oft zu sehen bekommen[2]:

DeletedDie Datei wurde von einem anderen Benutzer in der Zwischenzeit gelöscht.
ConflictedDie Datei ist in einem Conflict-Zustand, d.h. seit dem letzen Checkout hat ein anderer Benutzer diese Datei geändert und sie wurde außerdem lokal geändert. Subversion kann diese Änderung nicht automatisch zusammenführen (da z.B. die selbe Zeile geändert wurde). Ein Conflict benötigt IMMER Benutzer-Interaktion um aufgelöst zu werden.
UpdatedDie Datei wurde seit dem letzten Checkout nicht lokal verändert, aber ein anderer Benutzer hat Veränderungen daran vorgenommen.
AddedEin anderer Benutzer hat diese Datei neu hinzugefügt.
MergedSeit dem letzen Checkout hat ein anderer Benutzer diese Datei geändert und sie wurde außerdem lokal geändert. In diesem Fall konnte Subversion die Änderungen automatisch zusammenführen (da z.B. der eine Benutzer nur den Anfang der Datei geändert hat, lokal aber nur das Ende geändert wurde)

Working Copy commiten

Revert

Ignore

Diff

Conflicts

Blame

History

Browse

Clients

Für die Entwicklung unter Windows haben wir gute Erfahrungen mit den zwei nachfolgenden Clients[3] gemacht. Wir empfehlen den Einsatz von beiden Clients gleichzeitg, da sie beide je nach aktueller Aufgabe gewisse, substantielle Vor- bzw. Nachteile aufweisen.

TortoiseSVN

TortoiseSVN ist ein Open-Source Subversion-Client für Windows, der sich in den Explorer integriert. Dieser Client besitzt im Gegensatz zu AnkhSVN eine sehr gute Unterstützung für die Auflösung von Konflikten in Form des (mitinstallierten) Programms TortoiseMerge.

Da TortoiseSVN eine exzellente Dokumentation besitzt, werden wir hier nicht auf die Bedinung und Installation eingehen. Bei Bedarf empfehlen wir die folgenden Links (die Handbücher sind sehr umfangreich, daher geben wir die Kapitel mit den für euch relevanten Informationen zusätzlich an):

AnkhSVN

AnkhSVN ist ein Open-Source Subversion-Client für Windows der sich direkt in Visual Studio integriert. Der große Vorteil dieses Clients besteht in eben dieser Integration, da man dadurch

  • neu angelegte Dateien automatisch zum Repository hinzufügt (und somit nicht mehr vergisst),
  • Dateien die gelöscht wurden nicht mehr zusätzlich im Repository löschen muss,
  • direkt weiß, welche Dateien sich geändert haben,
  • komfortabel Dateien verschieben kann (mittels Drag and Drop in der IDE,
  • die IDE nur noch in Ausnahmefällen verlassen muss.

Leider liefert AnkhSVN im Gegensatz zu TortoiseSVN kein "vernünftiges" Programm zum Editieren von Konflikten mit, sodaß wir lieber beide Programme gemeinsam benutzen. Auch für AnkhSVN gehen wir nicht weiter auf Bedienung und Installation ein, sondern verweisen auf die folgenden Seiten:

siehe auch

Referenzen

  1. offizielle Seite des Subversion-Projekts
  2. Für eine vollständige Liste siehe http://knaddison.com/technology/svn-status-code-cheat-sheet
  3. für eine vollständigere Liste siehe Wikipedias Vergleich verschiedener SVN-Clients

Links