Änderungen

Subversion

7.213 Byte hinzugefügt, 17:54, 11. Mai 2012
Die Seite wurde neu angelegt: „Subversion (SVN) ist ein Tool zur zur Versionierung und gemeinsamen Entwicklung von Software. <br /> <br /> Für eine detailierte Einführung siehe hier: [[http:/…“
Subversion (SVN) ist ein Tool zur zur Versionierung und gemeinsamen Entwicklung von Software. <br />
<br />
Für eine detailierte Einführung siehe hier: [[http://svnbook.red-bean.com/en/1.7/svn.tour.html svnbook]]

== Installation ==

=== Debian/Ubuntu ===

Unter den meisten Linux Distributionen ist Subversion bereits installiert. Falls nicht kann man das einfach via Terminal nachholen:
<br />
<code shell>
apt-get install subversion
</code>

=== Windows ===

=== Mac OS X ===

Subversion installiert man am einfachsten, indem man die [[https://developer.apple.com/technologies/tools/ Apple Developer Tools]] von der Apple Website
oder via Appstore runterläd und installiert. <br />
Erfahrungsgemäß kann es vorkommen, das die Version die in den Developer Tools enthalten ist nicht die aktuellste ist.
Die jeweils aktuelle Version kann man dann einfach via [[http://www.macports.org/ Macports]] installieren.
<br />
kurz:
<br />
# Apple Developer Tools installieren
# Macports installieren
# mit <code shell>port install subversion</code> die aktuelle Version von Subversion installieren

== Arbeitskopie anlegen ==

Üblicherweise beginnt man indem man aus einem bestehenden Repository die aktuelle Version auf den eigenen Computer überträgt.
In dieser lokalen Arbeitskopie bearbeitet man den Code und überträgt die Daten später wieder zurück in das Repository.
<br />
Arbeitskopie anlegen: <br />
<code shell>
cd /path/on/your/computer
svn checkout protocol://user@host/remote/path/to/repository/trunk/src
</code>

== typischer Arbeitsablauf ==

# lokale Arbeitskopie anlegen (einmalig)
# Arbeitskopie aktualisieren
# Code lokal bearbeiten
# Änderungen überprüfen und auf korrekte Funktion testen
# Fehler korrigieren
# Konflikte beheben
# Änderungen in Repository übertragen
<br />

=== Arbeitskopie aktualisieren ===
<code shell>
cd /path/to/workingcopy
svn update
</code>
<br /><br />

=== Code lokal bearbeiten ===
Bearbeite den Code mit einem Editor deiner Wahl. Wenn du Dateien hinzufügst, löschst, kopierst oder verschiebst musst du SVN darüber informieren. Das macht
man folgendermaßen: <br />
<br />
<code shell>
svn add FOO
</code>
<br /><br />
Füge die Datei oder den Ordner "FOO" zum repository hinzu. Wenn FOO ein Ordner ist werden automatisch alle Dateien die in dem Ordner sind mit hinzugefügt. Möchte man einen Ordner hinzufügen, ohne dass alle darin enthaltenen Dateien ebenfalls hinzugefügt werden, dann benutzt man zusätzlich die option ''--depth=empty''.
<br /><br />
<code shell>
svn delete FOO
</code>
<br /><br />
Lösche die Datei oder den Ordner FOO aus dem Repository. Dateien werden im lokalen Dateisystem sofort gelöscht, Ordner erst beim nächsten commit.
<br /><br />
<code shell>
svn copy FOO BAR
</code>
<br /><br />
Kopiere die Datei FOO nach BAR. Die datei BAR wird automatisch zum Repository hinzugefügt und SVN speichert intern, dass BAR ursprünglich von der Datei FOO kommt.
<br /><br />
<code shell>
svn move FOO BAR
</code>
<br /><br />
Genauso wie FOO, aber BAR wird automatisch aus dem Repository gelöscht.
<br /><br />
<code shell>
svn mkdir FOO
</code>
<br /><br />
Kombiniert die Befehle ''mkdir FOO'' und ''svn add FOO'' in einen Befehl.
<br /><br />

=== Änderungen überprüfen und Fehler korrigieren ===
Nachdem der Code angepasst wurde muss dieser auf korrekte Funktion getestet werden. Je nach Sprache und Entwicklungsparadigma werden hier Unittests o.ä. benutzt.
Erst wenn sich die Änderungen fehlerfrei kompilieren lassen und der Code fehlerfrei läuft können wir den Code in das Repository überführen.
<br />
Als nützliches Werkzeug bietet Subversion die Möglichkeit alle geänderten Dateien aufzulisten mit dem Befehl
<br />
<code shell>
svn status
</code>
<br />
Nutzt man die Option ''-v'' wird der Status von allen Dateien angezeigt, auch wenn man diese nicht verändert hat.
<br />
Mit dem Befehl
<br />
<code shell>
svn diff
</code>
<br />
kann man sich in Menschen lesbarer Form alle Änderungen im Detail anzeigen lassen. Da die Ausgabe hier oft sehr umfangreich ist macht es meistens Sinn den Output in eine Datei umzuleiten mittels
<br />
<code shell>
svn diff > patchfile
</code>
<br />
Sollte man feststellen, das man in einer Datei grobe Fehler gemacht hat oder das man die falsche Datei bearbeitet hat, dann kann man alle Änderungen einer Datei
mittels
<br />
<code shell>
svn revert FOO
</code>
<br />
auf den letzten unveränderten Stand zurücksetzen. Der ''revert'' Befehl funktioniert auch wenn man eine Datei fälchlicherweise hinzugefügt oder gelöscht hat.

=== Konflikte beheben ===
Wenn man sichergestellt hat, dass alle Änderungen korrekt sind müssen wir erst auf Konflikte mit anderen Benutzern prüfen, bevor wir die Änderungen in das Repository übertragen. Wenn z.B. zwei Benutzer unabhängig voneinander die gleiche Datei bearbeitet haben gibt es einen solchen Konflikt. Wir müssen dann von Hand die Änderungen der beiden Nutzer zusammenführen.
Dazu führen wir als erstes ein ''update'' aus:
<code shell>
svn update
Updating '.':
U INSTALL
G README
Conflict discovered in 'bar.c'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
</code>
<br />
Da die Konfliktlösung sehr umfangreich werden kann verweise ich an dieser Stelle auf diesen Artikel: [[http://svnbook.red-bean.com/en/1.7/svn.tour.cycle.html#svn.tour.cycle.resolve Resolving Conflicts]]
<br />

=== Änderungen in Repository übertragen ===
Nachdem alle Konflikte behoben wurden können wir unsere Änderungen in das Repository übertragen:

<code shell>
svn commit -m "kurze Beschreibung was geändert wurde und was sonst noch wichtig ist"
</code>
Wenn die commit message sehr umfangreich ist, dann ist es oft sinnvoll diese in einer separaten Datei anzulegen. In diesem Fall kann man einfach den Inhalt der Datei direkt an SVN übergeben mittels
<code shell>
svn commit -F logmessage
</code>

== Tipps ==

'''1. kleine Veränderungen''' <br />
Es ist besser nur kleine Veränderungen (z.B. nur an einer Datei) zu machen und anschließend zu commiten. So verringert man aufwendiges Merging.
<br />

'''2. regelmäßige Updates'''<br />
Durch regelmäßige Updates verhindert man, dass man auf deralteten Daten arbeitet und durch ggf. bereits gepatchte Fehler weitere Fehler verursacht.
<br />

'''3. Absprache'''<br />
Auch eine Versionsverwaltung wie SVN hilft nur dann, wenn man sich vorher abspricht. So kann man verhindern, dass mehrere Benutzer an einem Problem arbeiten oder die gleiche Datei editieren. <br />
Es ist auch möglich für einzelne oder mehrere Dateien Locks zu setzen. Wenn ein Benutzer einen Lock setzt, dann kann nur er die Datei im Repository ändern, bis er den Lock aufhebt. Man sollte den Lock Mechanismus aber mit Vorsicht benutzen, da es schnell passieren kann, dass man vergisst den Lock wieder zu entfernen.
<br />

'''4. zusätzliche Tools'''<br />
Meistens ist es von Vorteil neben dem reinen SVN auch noch andere Tools zu verwenden. So kann man andere Benutzer über Commits und Patches informieren. Hierfür eigenen sich z.B. Mailinglisten, Bugtracker oder ein Wiki.
135
Bearbeitungen