Dieser Text befindet sich gegenwärtig in Bearbeitung, unterliegt ständigen Änderungen und kann dadurch nicht stets akkurat irgendeine freigegebene Version der Software Apache™ Subversion® beschreiben. Das Speichern dieser Seite als Lesezeichen oder andere auf diese Seite zu verweisen, ist keine so gute Idee. Besuchen Sie http://www.svnbook.com/, um stabile Versionen dieses Buchs zu erhalten.
Subversion hat zahlreiche Features, Optionen und noch jede Menge Schnickschnack, aber für die tägliche Arbeit ist die Wahrscheinlichkeit groß, nur wenig davon zu benutzen. In diesem Abschnitt gehen wir durch die gebräuchlichsten Dinge, die Sie während des Tagesgeschäftes mit Subversion machen werden.
Der typische Arbeitszyklus sieht so aus:
Aktualisieren Sie Ihre Arbeitskopie. Das bedingt die Verwendung des Befehls svn update.
Nehmen Sie Ihre Änderungen vor. Die häufigsten Änderungen, die Sie machen werden, sind Bearbeitungen des Inhalts Ihrer bestehenden Dateien. Doch manchmal müssen Sie Dateien und Verzeichnisse hinzufügen, entfernen und verschieben – die Befehle svn add, svn delete, svn copy sowie svn move bewerkstelligen derartige strukturelle Änderungen in der Arbeitskopie.
Überprüfen Sie Ihre Änderungen. Die Befehle svn status und svn diff sind entscheidend beim Überprüfen der von Ihnen in der Arbeitskopie vorgenommenen Änderungen.
Beheben Sie Ihre Fehler. Niemand ist vollkommen, und so kann es passieren, dass Sie beim Überprüfen Ihrer Änderungen etwas entdecken, was nicht richtig ist. Manchmal ist es am einfachsten, einfach erneut von vorne zu beginnen. Der Befehl svn revert stellt den ungeänderten Zustand einer Datei oder eines Verzeichnisses wieder her.
Lösen Sie etwaige Konflikte auf (arbeiten Sie die Änderungen anderer ein). Während der Zeit, die Sie benötigen, um Änderungen vorzunehmen und zu überprüfen, hätten andere ebenfalls Änderungen machen und sie veröffentlichen können. Sie sollten deren Änderungen in Ihre Arbeitskopie integrieren, um Szenarien bedingt durch Veralterung zu vermeiden, die möglicherweise entstehen, wenn Sie Ihre Änderungen veröffentlichen wollen. Auch hier hilft Ihnen der Befehl svn update weiter. Sollte das zu lokalen Konflikten führen, müssen Sie jene mithilfe des Befehls svn resolve auflösen.
Veröffentlichen (übertragen) Sie Ihre Änderungen. Der Befehl svn commit überträgt Ihre Änderungen in das Projektarchiv, in dem sie, falls sie angenommen werden, die neueste Version aller Dinge erstellen, die Sie modifiziert haben. Nun können auch andere Ihre Arbeit sehen.
Wenn Sie in einem Projekt arbeiten, das über mehrere Arbeitskopien modifiziert wird, sollten Sie Ihre Arbeitskopie aktualisieren, damit Sie die Änderungen aus anderen Arbeitskopien seit Ihrer letzten Aktualisierung mitbekommen. Es kann sich dabei um Änderungen handeln, die andere Mitarbeiter aus dem Team gemacht haben, oder aber Änderungen, die Sie selbst von einem anderen Computer gemacht haben. Um Ihre Daten zu schützen, erlaubt es Ihnen Subversion nicht, neue Änderungen auf veraltete Dateien und Verzeichnisse anzuwenden, so dass Sie am besten die neuesten Versionen aller Ihrer Projektdateien und -verzeichnisse haben, bevor Sie selbst irgendwelche Änderungen vornehmen.
Verwenden Sie svn update, um Ihre Arbeitskopie mit der letzten Revision im Projektarchiv zu synchronisieren:
$ svn update Aktualisiere ».«: U foo.c U bar.c Aktualisiert zu Revision 2. $
In diesem Fall sieht es so aus, dass jemand Änderungen
sowohl an foo.c
als auch an
bar.c
übertragen hat, seit Sie das letzte
Mal aktualisiert haben, und Subversion hat Ihre Arbeitskopie
aktualisiert, damit sie beide Änderungen enthält.
Wenn der Server über svn update
Änderungen an Ihre Arbeitskopie schickt, wird ein
Buchstabencode neben jedem Objekt angezeigt, um Ihnen
anzuzeigen, was Subversion gemacht hat, um die Arbeitskopie
auf den neuesten Stand zu bringen. Zur Bedeutung der
Buchstaben, rufen Sie svn help update
auf oder schauen sich svn update (up)
in svn Referenz – Subversion-Kommandozeilen-Client an.
Nun können Sie loslegen und Änderungen an Ihrer Arbeitskopie vornehmen. Sie können zwei Arten von Änderungen an Ihrer Arbeitskopie machen: Dateiänderungen und Baumänderungen. Sie brauchen Subversion nicht mitteilen, dass Sie beabsichtigen, eine Datei zu ändern; machen Sie einfach Ihre Änderungen mit Ihrem Editor, Textverarbeitungsprogramm, Grafikprogramm oder was Sie sonst normalerweise benutzen. Subversion merkt automatisch, welche Dateien verändert wurden; darüber hinaus behandelt es binäre Dateien ebenso einfach wie Textdateien – und ebenso effizient. Davon unterscheiden sich Baumänderungen, die Änderungen an der Verzeichnisstruktur nach sich ziehen. Zu solchen Änderungen zählen das Hinzufügen und Entfernen von Dateien, das Umbenennen von Dateien oder Verzeichnissen sowie das Kopieren von Dateien und Verzeichnissen an andere Orte. Für Baumänderungen verwenden Sie Subversion-Operationen, um Dateien und Verzeichnisse zum Löschen, Hinzufügen, Kopieren oder Verschieben „einzuplanen“. Diese Änderungen können sofort in Ihrer Arbeitskopie stattfinden, jedoch wird im Projektarchiv nichts hinzugefügt oder gelöscht bevor Sie die Änderungen übertragen haben.
Hier ist ein Überblick der fünf Subversion-Unterbefehle, die Sie am häufigsten benutzen werden, um Änderungen am Verzeichnisbaum vorzunehmen:
svn add FOO
Verwenden Sie diesen Befehl, um die Datei, das
Verzeichnis oder den symbolischen Link
FOO
zum Hinzufügen in das
Projektarchiv vormerken. Wenn Sie das nächste Mal übertragen,
wird FOO
ein Kind seines
Elternverzeichnisses. Beachten Sie, dass alles unterhalb
von FOO
zum Hinzufügen vorgemerkt
wird, falls FOO
ein Verzeichnis
ist. Falls Sie nur FOO
selber
hinzufügen möchten, geben Sie die Option
--depth=empty
an.
svn delete FOO
Verwenden Sie das, um die Datei, das Verzeichnis
oder den symbolischen Link FOO
zum
Löschen aus dem Projektarchiv vormerken.
FOO
wird sofort aus der
Arbeitskopie entfernt.
(Selbstverständlich wird nichts jemals vollständig aus dem
Projektarchiv gelöscht – lediglich aus seiner
HEAD
-Revision. Sie können weiterhin auf
das gelöschte Objekt in früheren Revisionen zugreifen.)
[6]
svn copy FOO BAR
Erzeuge ein neues Objekt BAR
als Duplikat von FOO
und merke
BAR
automatisch zum Hinzufügen vor.
Wird bei der nächsten Übergabe BAR
dem
Projektarchiv hinzugefügt, wird die Historie der Kopie
mit aufgezeichnet (so wie sie ursprünglich in
FOO
war). svn
copy erzeugt keine Zwischenverzeichnisse,
sofern nicht die Option --parents
angegeben wird..
svn move FOO BAR
Dieser Befehl macht genau das gleiche wie
svn copy FOO BAR; svn delete FOO
.
D.h., BAR
wird zum Hinzufügen als
Kopie von FOO
und
FOO
selbst zum Löschen vorgemerkt.
svn move erzeugt keine
Zwischenverzeichnisse, sofern nicht die Option
--parents
angegeben wird.
svn mkdir FOO
Dieser Befehl macht genau das gleiche wie
mkdir FOO; svn add FOO
. D.h., ein
neues Verzeichnis namens FOO
wird
angelegt und zum Hinzufügen vorgemerkt.
Sobald Sie mit Ihren Änderungen fertig sind, müssen Sie sie ins Projektarchiv bringen; es ist normalerweise eine gute Idee, sich die Änderungen zuvor noch einmal anzusehen. Dadurch, dass Sie die Änderungen noch einmal begutachten, können Sie eine genauere Protokollnachricht schreiben (eine menschenlesbare Beschreibung der übertragenen Änderungen, die neben ihnen im Projektarchiv gespeichert wird). Es könnte auch sein, dass Sie feststellen, versehentlich eine Datei geändert zu haben, und dass Sie vor der Übergabe diese Änderung rückgängig machen müssen. Zusätzlich bietet sich hierbei eine gute Gelegenheit, die Änderungen vor der Veröffentlichung noch einmal genau durchzugehen. Sie können sich mit svn status einen Überblick über Ihre Änderungen verschaffen und mit svn diff die Änderungen im Detail anzeigen lassen.
Um einen Überblick über Ihre Änderungen zu bekommen, verwenden Sie den Befehl svn status. Wahrscheinlich werden Sie den Befehl svn status häufiger benutzen als alle anderen Subversion-Befehle.
Tipp | |
---|---|
Da die Ausgabe des Befehls cvs status so geräuschvoll war, und cvs update nicht nur eine Aktualisierung vornimmt sondern auch den Status Ihrer lokalen Änderungen meldet, haben sich die meisten Anwender von CVS angewöhnt, cvs update zum Anzeigen Ihrer Meldungen zu verwenden. In Subversion sind die Aktualisierungs- und Statusmeldefunktionen vollständig getrennt. Zu Details, siehe „Unterscheidung zwischen Status und Update“ |
Wenn Sie svn status
ohne
zusätzliche Argumente ganz oben in Ihrer Arbeitskopie
aufrufen, erfasst und meldet es alle Datei- und
Verzeichnisbaumänderungen, die Sie gemacht haben.
$ svn status ? scratch.c A stuff/loot A stuff/loot/new.c D stuff/old.c M bar.c $
In seinem Standard-Ausgabemodus zeigt svn status sieben Spalten mit Zeichen, gefolgt von mehreren Leerzeichen und einem Datei- oder Verzeichnisnamen an. Die erste Spalte gibt Aufschluss über den Zustand einer Datei oder eines Verzeichnisses und/oder des entsprechenden Inhalts. Einige der häufigsten Codes, die svn status anzeigt, sind:
? item
Die Datei, das Verzeichnis oder der symbolische
Link item
ist nicht unter
Versionskontrolle.
A item
Die Datei, das Verzeichnis oder der symbolische
Link item
ist zum Hinzufügen in
das Projektarchiv vorgemerkt.
C item
Die Datei item
befindet sich
in einem Konfliktzustand. D.h., Änderungen, die vom
Server bei einer Aktualisierung empfangen wurden,
überlappen sich mit lokalen Änderungen, die Sie in
Ihrer Arbeitskopie haben (und konnten beim
Aktualisieren nicht automatisch aufgelöst werden). Sie
müssen den Konflikt auflösen, bevor Sie Ihre
Änderungen in das Projektarchiv übertragen können.
D item
Die Datei, das Verzeichnis oder der symbolische
Link item
ist zum Löschen im
Projektarchiv vorgemerkt.
M item
Der Inhalt der Datei item
ist geändert worden.
Wenn Sie einen speziellen Pfad an svn status übergeben, bekommen Sie nur Informationen über dieses Objekt:
$ svn status stuff/fish.c D stuff/fish.c
svn status hat auch eine
--verbose
-Option (-v
),
die Ihnen den Zustand jedes Objektes in
der Arbeitskopie anzeigt, selbst wenn es sich nicht geändert
hat:
$ svn status -v M 44 23 sally README 44 30 sally INSTALL M 44 20 harry bar.c 44 18 ira stuff 44 35 harry stuff/trout.c D 44 19 ira stuff/fish.c 44 21 sally stuff/things A 0 ? ? stuff/things/bloo.h 44 36 harry stuff/things/gloo.c
Dies ist das „lange Format“ der Ausgabe von svn status. Die Buchstaben in der ersten Spalte bedeuten dasselbe wie vorher, jedoch zeigt die zweite Spalte die Arbeitsrevision des Objektes an. Die dritte und vierte Spalte zeigen die Revision der letzten Änderung an und wer es geändert hat.
Keiner der vorangegangenen Aufrufe von svn
status stellt eine Verbindung zum Projektarchiv
her – sie berichten lediglich, das, was über die
Objekte in der Arbeitskopie aus den Aufzeichnungen im
Verwaltungsbereich der Arbeitskopie hervorgeht, sowie aus
den Zeitstempeln und dem Inhalt geänderter Dateien. Manchmal
ist es jedoch dienlich, zu sehen, welche der Objekte in
Ihrer Arbeitskopie seit Ihrer letzten Aktualisierung im
Projektarchiv geändert wurden. Dafür bietet svn
status die Option --show-updates
(-u
), die eine Verbindung zum Projektarchiv
herstellt, und Informationen darüber bereitstellt, was nicht
mehr aktuell ist:
$ svn status -u -v M * 44 23 sally README M 44 20 harry bar.c * 44 35 harry stuff/trout.c D 44 19 ira stuff/fish.c A 0 ? ? stuff/things/bloo.h Status bezogen auf Revision: 46
Beachten Sie die zwei Sternchen im vorangegangenen
Beispiel: Wenn Sie an dieser Stelle svn
update
aufrufen würden, erhielten Sie Änderungen
an README
und
trout.c
. Das gibt Ihnen einige sehr
wichtige Informationen: Da eins dieser Objekte auch von
Ihnen lokal geändert wurde (die Datei
README
) müssen Sie vor der Übergabe
aktualisieren, um die Änderungen an
README
vom Server mitzubekommen, oder
das Projektarchiv wird Ihre Übergabe ablehnen, da sie nicht
aktuell ist. Wir werden das später detailliert
erörtern
svn status kann viel mehr
Informationen über Dateien und Verzeichnisse in Ihrer
Arbeitskopie anzeigen als wir hier gezeigt haben – für
eine erschöpfende Beschreibung von svn
status und dessen Ausgabe, rufen Sie
svn help status
auf oder schauen Sie
unter svn status (stat, st) in
svn Referenz – Subversion-Kommandozeilen-Client.
Eine andere Möglichkeit, Ihre Änderungen zu
untersuchen, ist es, den Befehl svn diff
zu verwenden, der Unterschiede im Dateiinhalt anzeigt. Wenn
Sie svn diff
ganz oben in Ihrer
Arbeitskopie ohne Argumente aufrufen, gibt Subversion die
von Ihnen gemachten Änderungen an menschenlesbaren Dateien
in Ihrer Arbeitskopie aus. Jene Änderungen werden in einem
Format namens unified diff angezeigt,
welches Änderungen als „Brocken“ (oder
„Schnipsel“) des Dateiinhalts anzeigt, wobei
jeder Textzeile ein Zeichencode vorangestellt wird: ein
Leerzeichen, das bedeutet, dass die Zeile nicht geändert
wurde, ein Minus (-
), das bedeutet, dass
die Zeile aus der Datei entfernt wurde oder ein Plus
(+
), das bedeutet, dass die Zeile der
Datei hinzugefügt wurde. Im Kontext des Befehls svn
diff zeigen Ihnen diese Minus- und Pluszeilen, wie
die Zeilen vor bzw. nach Ihren Änderungen aussahen.
Hier ein Beispiel:
$ svn diff Index: bar.c =================================================================== --- bar.c (Revision 3) +++ bar.c (Arbeitskopie) @@ -1,7 +1,12 @@ +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include <stdio.h> int main(void) { - printf("Sixty-four slices of American Cheese...\n"); + printf("Sixty-five slices of American Cheese...\n"); return 0; } Index: README =================================================================== --- README (Revision 3) +++ README (Arbeitskopie) @@ -193,3 +193,4 @@ +Note to self: pick up laundry. Index: stuff/fish.c =================================================================== --- stuff/fish.c (Revision 1) +++ stuff/fish.c (Arbeitskopie) -Welcome to the file known as 'fish'. -Information on fish will be here soon. Index: stuff/things/bloo.h =================================================================== --- stuff/things/bloo.h (Revision 8) +++ stuff/things/bloo.h (Arbeitskopie) +Here is a new file to describe +things about bloo.
Der Befehl svn diff erzeugt diese Ausgabe, indem er Ihre Arbeitsdateien mit der unveränderten Text-Base vergleicht. Dateien, die zum Hinzufügen vorgemerkt sind, werden vollständig als hinzugefügter Text dargestellt, und Dateien, die zum Löschen vorgemerkt sind, werden vollständig als gelöschter Text dargestellt. Die Ausgabe von svn diff ist einigermaßen kompatibel zum Programm patch – mehr allerdings mit dem in Subversion 1.7 eingeführten Unterbefehl svn patch. Patch-Programme wie diese lesen und verwenden Patch-Dateien (oder „Patches“), wobei es sich um Dateien handelt, die Unterschiede an einer oder mehreren Dateien beschreiben. Daher können Sie die in Ihrer Arbeitskopie vorgenommenen Änderungen mit jemanden teilen, ohne die Änderungen erst übertragen zu müssen, indem Sie aus der umgeleiteten Ausgabe des Befehls svn diff eine Patch-Datei erzeugen:
$ svn diff > patchfile $
Subversion verwendet seinen eingebauten
diff-Algorithmus, der standardmäßig das unified-diff-Format
benutzt. Falls Sie die Ausgabe von diff in einem anderen
Format haben möchten, geben Sie ein externes diff-Programm
mit der --diff-cmd
-Option an, und übergeben
Sie ihm beliebige Flags mit der Option
--extensions
(-x
). Sie
möchten beispielsweise, dass Subversion die Berechnung und
Anzeige der Unterschiede an das GNU-Programm
diff delegiert, wobei die lokalen
Änderungen an der Datei foo.c
im
Kontext-Format ausgegeben (einer anderen Darstellung der
Unterschiede) und Unterschiede in Groß- und Kleinschreibung
des Dateiinhalts ignoriert werden:
$ svn diff --diff-cmd /usr/bin/diff -x "-i" foo.c … $
Angenommen, Sie stellen beim Ansehen der Ausgabe von
svn diff fest, dass alle Änderungen, die
Sie an einer bestimmten Datei gemacht haben, fehlerhaft waren.
Vielleicht hätten Sie die Datei überhaupt nicht ändern sollen,
oder es wäre einfacher, noch einmal bei Null
anzufangen. Sie könnten die Datei erneut bearbeiten und alle
Änderungen rückgängig machen. Sie könnten versuchen, eine
Kopie der Datei im Ursprungszustand zu bekommen und deren
Inhalt über Ihre Änderungen zu kopieren. Sie könnten
versuchen, diese Änderungen erneut mit svn patch
--reverse-diff
, oder mit Ihrem Betriebssystem,
patch -R
, rückwärts anzuwenden. Es
gibt wahrscheinlich noch andere Herangehensweisen, die Sie
ausprobieren könnten.
In Subversion bedarf das Rückgängigmachen und bei Null anfangen glücklicherweise nicht derartiger Akrobatik. Verwenden Sie einfach den Befehl svn revert:
$ svn status README M README $ svn revert README Rückgängig gemacht: »README« $ svn status README $
In diesem Beispiel hat Subversion die Datei wieder so her, wie sie vor der Änderung war, indem sie mit der unveränderten Version der Datei aus dem Cache der Text-Base überschrieben wurde. Beachten Sie aber auch, dass svn revert jegliche vorgemerkten Operationen rückgängig machen kann – z.B. könnten Sie sich entscheiden, eine neue Datei erst gar nicht hinzufügen zu wollen:
$ svn status new-file.txt ? new-file.txt $ svn add new-file.txt A new-file.txt $ svn revert new-file.txt Rückgängig gemacht: »new-file.txt« $ svn status new-file.txt ? new-file.txt $
Oder vielleicht haben Sie die Datei versehentlich aus der Versionsverwaltung gelöscht:
$ svn status README $ svn delete README D README $ svn revert README Rückgängig gemacht: »README« $ svn status README $
Der Befehl svn revert bietet die Rettung für unvollkommene Menschen. Er kann Ihnen jede Menge Zeit und Energie einzusparen helfen, die ansonsten beim manuellen Rückgängigmachen entstanden wäre, oder noch schlimmer, wenn Sie Ihre Arbeitskopie durch eine frische hätten ersetzen müssen, um noch einmal neu anzufangen.
Wir haben bereits gesehen, wie svn
status -u
Konflikte vorhersagen kann, jedoch
müssen wir uns noch um diese Konflikte kümmern. Konflikte
können jederzeit auftreten, wenn Sie versuchen, Änderungen aus
dem Projektarchiv mit Ihrer Arbeitskopie zusammenzuführen oder
zu integrieren (in einem sehr allgemeinen Sinn). Bis hierher
wissen Sie, dass svn update genau diese Art
von Szenario hervorruft – der eigentliche Zweck dieses
Befehls ist es, Ihre Arbeitskopie mit dem Projektarchiv auf
einen Stand zu bringen, indem alle Änderungen seit Ihrer
letzten Aktualisierung mit Ihrer Arbeitskopie zusammengeführt
werden. Wie teilt Ihnen Subversion nun diese Konflikte mit,
und wie gehen Sie damit um?
Angenommen, Sie rufen svn update auf und sehen diese interessante Ausgabe:
$ svn update Aktualisiere ».«: U INSTALL G README Konflikt in »bar.c« entdeckt. Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts, (s) alle Optionen anzeigen:
Die Codes U
und
G
sind kein Grund zur
Beunruhigung; diese Dateien haben die Änderungen aus dem
Projektarchiv sauber aufgenommen. Eine mit
U
markierte Datei enthält
keine lokalen Änderungen, wurden jedoch mit Änderungen aus dem
Projektarchiv aktualisiert. Eine mit
G
markierte Datei enthielt
zwar lokale Änderungen, die Änderungen aus dem Projektarchiv
standen aber damit nicht in Konflikt.
Die nächsten paar Zeilen sind allerdings interessant.
Zunächst teilt Ihnen Subversion mit, dass es beim Versuch,
ausstehende Server-Änderungen in die Datei
bar.c
hineinzubringen, festgestellt hat,
dass einige dieser Änderungen mit lokalen Änderungen
kollidieren, die Sie an dieser Datei in Ihrer Arbeitskopie
vorgenommen, jedoch noch nicht übertragen haben. Vielleicht hat
jemand dieselbe Textzeile wie Sie geändert. Wie dem auch sei,
Subversion markiert diese Datei umgehend als konfliktbehaftet.
Dann fragt es Sie, wie Sie mit diesem Problem umgehen möchten,
indem es Ihnen interaktiv einen Bearbeitungsschritt zur
Auflösung des Konfliktes anbietet. Die am häufigsten
verwendeten Optionen werden angezeigt, aber Sie können auch
alle Optionen sehen, wenn Sie s
eintippen:
… Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts, (s) alle Optionen anzeigen: s (e) - Bearbeitet die zusammengeführte Datei in einem Editor [edit] (df) - Zeigt alle Änderungen an der zusammengeführten Datei an (r) - Akzeptiert die zusammengeführte Version der Datei (dc) - Zeigt alle Konflikte an (ignoriert zusammengeführte Datei) (mc) - Akzeptiert eigene Version für alle Konflikte (ebenso) [mine-conflict] (tc) - Akzeptiert fremde Version für alle Konflikte (ebenso) [theirs-conflict] (mf) - Akzeptiert eigene Version für ganze Datei (alles, nicht nur Konflikte) [mine-full] (tf) - Akzeptiert fremde Version für ganze Datei (ebenso) [theirs-full] (m) - Verwendet das interne Werkzeug zum Zusammenführen für die Konfliktlösung (l) - Startet ein externes Werkzeug zum Zusammenführen für die Konfliktlösung [launch] (p) - Markiert den Konflikt für eine spätere Auflösung [postpone] (q) - Alle verbleibenen Konflikte zurückstellen (s) - Gibt diese Liste aus (auch: »h«, »?«) Worte in eckigen Klammen geben das entsprechende Argument für die Option »--accept« an. Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts, (s) alle Optionen anzeigen:
Bevor wir im Detail erklären, was jede Option bedeutet, gehen wir noch mal eben die Optionen durch.
(e) bearbeiten [edit]
Die Konfliktdatei im bevorzugten Editor, wie in
der Umgebungsvariablen EDITOR
angegeben, öffnen.
(df) alle Änderungen anzeigen [diff-full]
Die Unterschiede zwischen der Basisrevision und der Konfliktdatei im unified-diff-Format anzeigen.
(r) als aufgelöst erklären [resolved]
Nach dem Bearbeiten einer Datei teilen Sie svn mit, dass Sie die Konflikte in der Datei aufgelöst haben und der aktuelle Inhalt übernommen werden soll.
(dc) Konflikte anzeigen [display-conflict]
Zeigt alle konfliktbehafteten Regionen der Datei an, wobei erfolgreich zusammengeführte Änderungen ignoriert werden.
(mc) eigene Version für alle Konflikte [mine-conflict]
Die neuen vom Server erhaltenen Änderungen verwerfen, die in Konflikt mit Ihren lokalen Änderungen an der zu überprüfenden Datei stehen. Jedoch werden alle nicht in Konflikt stehenden Änderungen vom Server für diese Datei angenommen und zusammengeführt.
(tc) fremde Version für alle Konflikte [theirs-conflict]
Alle lokalen Änderungen an der zu überprüfenden Datei verwerfen, die in Konflikt zu Änderungen vom Server stehen. Jedoch werden alle nicht in Konflikt stehenden lokalen Änderungen an dieser Datei beibehalten.
(mf) ganze eigene Datei [mine-full]
Alle neuen vom Server erhaltenen Änderungen für die zu überprüfende Datei verwerfen, aber alle Ihre lokalen Änderungen an dieser Datei beibehalten.
(tf) ganze fremde Datei [theirs-full]
Alle Ihre lokalen Änderungen für die zu überprüfende Datei verwerfen und nur die neuen vom Server erhaltenen Änderungen für diese Datei verwenden.
(m) zusammenführen [merge]
Ein internes Werkzeug zur Zusammenführen aufrufen, um die Konfliktauflösund durchzuführen. Diese Option ist ab Subversion 1.8 verfügbar.
(l) externes Werkzeug starten [launch]
Ein externes Programm zur Konfliktauflösung starten. Das setzt Vorbereitungen voraus.
(p) zurückstellen [postpone]
Die Datei im Konfliktzustand lassen, um nach Abschluss der Aktualisierung die Konfliktauflösung durchzuführen.
(s) alle Befehle anzeigen [show all]
Die Liste aller bei der interaktiven Konfliktauflösung möglichen Befehle anzeigen.
Wir werden diese Befehle nun detaillierter behandeln, wobei sie nach Funktionalität gruppiert werden.
Bevor Sie entscheiden, wie Sie einen Konflikt
beseitigen wollen, wollen Sie wahrscheinlich genau sehen,
worin der Konflikt besteht. Zwei der bei der interaktiven
Aufforderung zur Verfügung stehenden Befehle können Ihnen
dabei helfen. Der erste ist der Befehl „voller
Diff“ (df
), der alle lokalen
Änderungen an der zu begutachtenden Datei und die in
Konflikt stehenden Regionen anzeigt:
… Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts, (s) alle Optionen anzeigen: df --- .svn/text-base/sandwich.txt.svn-base Di 11. Dez 21:33:57 2007 +++ .svn/tmp/tempfile.32.tmp Di 11. Dez 21:34:33 2007 @@ -1 +1,5 @@ -Just buy a sandwich. +<<<<<<< .mine +Go pick up a cheesesteak. +======= +Bring me a taco! +>>>>>>> .r32 …
Die erste Zeile des diff-Inhalts zeigt den vorherigen
Inhalt der Arbeitskopie (die
BASE
-Revision), die nächste Zeile
beinhaltet Ihre Änderung und die letzte Zeile ist die
Änderung, die soeben vom Server empfangen worden ist
(gewöhnlich die
HEAD
-Revision).
Der zweite Befehl ist ähnlich wie der erste, jedoch
zeigt der Befehl „Konflikte anzeigen“
(dc
) nur die in Konflikt stehenden
Regionen an statt aller Änderungen an der Datei. Darüber
hinaus verwendet dieser Befehl ein etwas anderes
Darstellungsformat für die Konfliktregionen, das es Ihnen
auf einfache Weise erlaubt, den Dateiinhalt dieser Regionen
in den drei möglichen Zuständen zu vergleichen: original und
unbearbeitet, mit Ihren Änderungen, wobei die in Konflikt
stehenden Änderungen vom Server ignoriert werden und mit den
Änderungen vom Server, wobei Ihre lokalen Änderungen
rückgängig gemacht wurden.
Nachdem Sie die durch diesen Befehl bereitgestellten Informationen geprüft haben, können Sie den nächsten Schritt in Angriff nehmen.
Die übliche Vorgehensweise, um Konflikte interaktiv aufzulösen, ist die Verwendung eines internen Werkzeugs zum Zusammenführen. Das Werkzeug fragt Sie, wie jede konfliktbehaftete Änderung zu behandeln ist und erlaubt Ihnen, Änderungen selektiv zusammenzuführen und zu bearbeiten. Jedoch gibt es verschiedene andere Wege, um Konflikte interaktiv aufzulösen – von denen Ihnen zwei erlauben, Änderungen selektiv zusammenzuführen und zu editieren und die restlichen, die es Ihnen erlauben, einfach eine Version der Datei auszuwählen und weiterzumachen. Das interne Werkzeug kombiniert alle verfügbaren Möglichkeiten, um Konflikte aufzulösen.
Sie haben die konfliktbehafteten Änderungen bereits geprüft,
so dass es nun an der Zeit ist, die Konflikte aufzulösen. Der
erste Befehl, der Ihnen helfen sollte, ist der
Befehl „merge“ (m
), der seit
Subversion 1.8 verfügbar ist. Der Befehl zeigt die
Konfliktbereiche an und erlaubt es Ihnen, eine Auswahl aus
Optionen zur Konfliktbeseitigung in jedem dieser Bereiche:
Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts, (s) alle Optionen anzeigen: m Zusammenführung von »Makefile«. Abschnitt mit Konflikt während Zusammenführung gefunden: (1) fremde Version (in Zeile 24) |(2) eigene Version (in Zeile 24) ------------------------------------------------+------------------------------------------------ top_builddir = /bar |top_builddir = /foo ------------------------------------------------+------------------------------------------------ Auswahl: (1) verwendet fremde Version, (2) verwendet eigene Version, (12) verwendet fremde Version zuerst, dann eigene, (21) verwendet eigene Version zuerst, dann fremde, (e1) bearbeitet fremde Version und verwendet das Ergebnis, (e2) bearbeitet eigene Version und verwendet das Ergebnis, (eb) bearbeitet beide Versionen und verwendet das Ergebnis, (p) Verschiebt Konfliktlösung für diesen Abschnitt und setzt Konfliktmarkierungen, (a) Bricht Zusammenführung der Datei ab und kehrt zum Hauptmenü zurück:
Wie Sie sehen, können Sie bei Verwendung des internen Werkzeugs zum Zusammenführen durch die individuellen Konfliktbereiche der Datei gehen und verschiedene Optionen zur Auflösung auswählen oder die Auflösung ausgewählter Konflikte auf später verschieben.
Falls Sie jedoch einen externen Editor verwenden wollen, um
eine beliebige Kombination Ihrer lokalen Änderungen auszuwählen,
können Sie den Befehl
„editieren“ (e
)
verwenden, um die Datei mit den Konfliktmarken manuell in
einem Texteditor (nach den Anweisungen in „Verwendung externer Editoren“ konfiguriert)
bearbeiten. Nachdem Sie die Datei bearbeitet haben und mit
Ihren Änderungen zufrieden sind, können Sie Subversion
mitteilen, das sich die bearbeitete Datei nicht mehr im
Konfliktzustand befindet, indem Sie den Befehl
„resolved“ (r
)
benutzen.
Egal, was Ihnen wahrscheinlich Ihr Unix-Snob erzählen
wird, die manuelle Bearbeitung der Datei in Ihrem
Lieblings-Texteditor ist die Low-Tech Variante zur
Beseitigung von Konflikten (siehe „Manuelle Konfliktauflösung“ für die
Vorgehensweise). Aus diesem Grund bietet Subversion den
Befehl „starten“ (l
) zum
Starten eines schicken graphischen Werkzeugs zum
Zusammenführen (siehe „Externes merge“).
Es gibt noch ein Paar an Kompromissoptionen.
Die Befehle „mine-conflict“
(mc
)
und „theirs-conflict“
(tc
) sagen Subversion, es soll Ihre
lokalen Änderungen bzw. die Änderungen vom Server zum
Auflösen aller Konflikte innerhalb der Datei heranziehen.
Im Gegensatz zu den Befehlen „volle eigene
Datei“ und „volle fremde Datei“ bewahren
beide Befehle jedoch Ihre lokalen Änderungen und die
Änderungen vom Server an den Stellen der Datei, an denen
keine Konflikte entdeckt wurden.
Sollten Sie sich letztlich entscheiden, dass Sie keine Änderungen
zusammenzuführen brauchen, sondern lediglich eine der beiden
Dateiversionen akzeptieren wollen, können Sie entweder Ihre
Änderungen (auch „meine“) mit dem
„mine-full“-Befehl (mf
)
oder die der Anderen mit dem „theirs-full“-Befehl
(tf
) auswählen.
Das hört sich vielleicht an wie ein passender Abschnitt
zur Vermeidung von Ehestreitigkeiten, doch es geht immer
noch um Subversion; also lesen Sie weiter. Falls Sie eine
Aktualisierung vornehmen und ein Konflikt auftaucht, den Sie
nicht begutachten oder auflösen können, ermöglicht Ihnen das
Eingeben von p
die Konfliktauflösung
Datei für Datei aufzuschieben, wenn Sie svn
update
aufrufen. Falls Sie bereits vorher
wissen, dass Sie aktualisieren wollen, ohne Konflikte
aufzulösen, können Sie die Option
--non-interactive
an svn
update übergeben, und jede Datei mit Konflikten
wird automatisch mit einem
C
gekennzeichnet.
Beginnend mit Subversion 1.8 erlaubt Ihnen ein internes Werkzeug zur Zusammenführung, die Auflösung bestimmter Konflikte auf einen späteren Zeitpunkt zu verlegen, andere Konflikte jedoch aufzulösen. Daher können Sie eine bereichs- anstatt dateiabhängige Konfliktauflösung vornehmen.
Das C
(für
„Conflicted“) bedeutet, dass
die Änderungen vom Server sich mit Ihren eigenen
überschneiden, und Sie nach Abschluss der Aktualisierung
manuell aus den Änderungen wählen müssen. Wenn Sie eine
Konfliktauflösung verschieben, macht svn
typischerweise drei Dinge, um Ihnen bei der
Konfliktauflösung zu helfen:
Subversion gibt ein
C
während der
Aktualisierung aus und merkt sich, dass die Datei in
einem Konfliktzustand ist.
Falls Subversion die Datei als geeignet zum
Zusammenführen ansieht, fügt es
Konfliktmarken – besondere
Zeichenketten, die die Konfliktregion begrenzen –
in die Datei ein, um die überlappenden Bereiche
besonders hervorzuheben. (Subversion verwendet die Eigenschaft
svn:mime-type
, um
festzustellen, ob sich die Datei kontextuell zeilenweise
zusammenführen lässt. Siehe „Datei-Inhalts-Typ“, um
mehr zu erfahren.)
Für jede Datei mit Konflikten stellt Subversion drei zusätzliche unversionierte Dateien in Ihre Arbeitskopie:
filename.mine
Dies ist die Datei aus der Arbeitskopie bevor
Sie die Aktualisierung begannen. Diese Datei beinhaltet
alle von Ihnen bis dahin vorgenommenen lokalen Änderungen.
(Falls Subversion diese Datei als nicht-zusammenführbar
erachtet, wird die .mine
-Datei nicht
erstellt, da sie identisch mit der Datei der Arbeitskopie
wäre.)
filename.rOLDREV
Dies ist die Datei, wie sie in der
BASE
-Revision aussah, d.h., die
unmodifizierte Revision der Datei in Ihrer
Arbeitskopie bevor Sie die
Aktualisierung begonnen haben, wobei
OLDREV
die
Nummer der BASE
-Revision
ist.
filename.rNEWREV
Dies ist die Datei, die Ihr Subversion-Client
soeben durch die Aktualisierung Ihrer Arbeitskopie
vom Server erhalten hat, wobei
NEWREV
der
Revisionsnummer entspricht, auf der Sie
aktualisiert haben (HEAD
, falls
nichts anderes angegeben wurde).
Beispielsweise ändert Sally die Datei
sandwich.txt
, übergibt diese Änderungen
jedoch noch nicht. In der Zwischenzeit übergibt Harry
Änderungen an derselben Datei. Sally aktualisiert Ihre
Arbeitskopie vor der Übergabe und bekommt einen Konflikt,
den sie verschiebt:
$ svn update Aktualisiere ».«: Konflikt in »sandwich.txt« entdeckt. Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts (s) alle Optionen anzeigen: p C sandwich.txt Aktualisiert zu Revision 2. Konfliktübersicht: Textkonflikte: 1 $ ls -1 sandwich.txt sandwich.txt.mine sandwich.txt.r1 sandwich.txt.r2
An dieser Stelle erlaubt Subversion Sally
nicht, die Datei
sandwich.txt
an das Projektarchiv zu
übertragen, solange die drei temporären Dateien nicht
entfernt werden:
$ svn commit -m "Add a few more things" svn: E155015: Übertragen schlug fehl (Details folgen): svn: E155015: Übertragung abgebrochen: »/home/sally/svn-work/sandwich.txt« bleibt im Konflikt
Falls Sie eine Konfliktauflösung aufgeschoben haben,
müssen Sie den Konflikt auflösen, bevor Ihnen Subversion
erlaubt, Ihre Änderungen in das Projektarchiv einzustellen.
Sie werden dafür den Befehl svn resolve
aufrufen. Dieser Befehl akzeptiert die Option
--accept
, die es Ihnen erlaubt, den von
Ihnen gewünschten Ansatz zur Konfliktauflösung anzugeben.
Vor Subversion 1.8 machte der Befehl svn resolve die
Verwendung dieser Option erforderlich.
Jetzt erlaubt Ihnen Subversion, den Befehl svn
resolve ohne diese Option aufzurufen. Wenn Sie das
tun, startet Subversion seinen interaktiven
Konfliktauflösungs-Mechanismus, über den Sie (falls Sie es
noch nicht getan haben) im vorigen Abschnitt mehr erfahren:
„Interaktive Konfliktauflösung“
The --accept
option to the svn
resolve command instructs Subversion to use one of
its pre-packaged approaches to conflict resolution. If
you want Subversion to resolve the conflict using the
version of the file that you last checked out before making
your edits, use --accept=base
. If you'd
prefer instead to keep the version that contains only your
edits, use --accept=mine-full
. You can also
select the version that your most recent update pulled from
the server (discarding your edits entirely)—that's
done using --accept=theirs-full
. There
are other „canned“ resolution types, too. See
--accept
ACTION
in
svn Referenz – Subversion-Kommandozeilen-Client for details.
Die Option --accept
des Befehls
svn resolve fordert Subversion auf, einen
seiner vorgefertigten Ansätze zur Konfliktauflösung zu
verwenden. Falls Sie möchten, dass Subversion den Konflikt
dergestalt auflöst, dass die von Ihnen zuletzt ausgecheckte
Version vor Ihren Änderungen verwendet wird, wählen Sie
--accept=base
. Sollten Sie stattdessen die
Version behalten möchten, die nur Ihre Änderungen enthält,
verwenden Sie --accept=mine-full
. Sie
können auch die Version wählen, die Ihre letzte
Aktualisierung vom Server gezogen hat (und somit Ihre
Änderungen vollständig verwerfen); dafür nehmen Sie
--accept=theirs-full
. Daneben gibt es
weitere Auflösungstypen „aus der Dose“. Zu
Details, siehe --accept
ACTION
in
svn Referenz – Subversion-Kommandozeilen-Client.
Sie sind jedoch nicht streng auf die
Alles-oder-Nichts-Optionen beschränkt. Wenn Sie frei aus
Ihren Änderungen und den Änderungen vom Server wählen
möchten, können Sie die Arbeitsdatei manuell durch
„händische“ Bearbeitung des konfliktbehafteten
Textes reparieren (indem Sie die Konfliktmarken in der Datei
begutachten und editieren) und anschließend Subversion durch
den Befehl svn resolve mit der Option
--accept=working
mitteilen, den Konflikt
dergestalt aufzulösen, dass die Arbeitsdatei im
gegenwärtigen Zustand behalten wird.
svn resolve entfernt die drei temporären Dateien und akzeptiert die Version, die Sie angegeben haben. Nach dem erfolgreichen Abschluss des Befehls – und unter der Annahme, dass Sie die Konfliktauflösung natürlich nicht interaktiv aufgeschoben haben – betrachtet Subversion die Datei nun als nicht mehr konfliktbehaftet:
$ svn resolve --accept working sandwich.txt Konflikt von »sandwich.txt« aufgelöst
Das manuelle Auflösen von Konflikten kann ganz schön einschüchternd sein, wenn Sie es das erste Mal versuchen; jedoch kann es mit etwas Übung so leicht werden, wie vom Fahrrad zu fallen.
Hier ist ein Beispiel. Aufgrund einer schlechten Absprache
bearbeiten Sie und Ihre Mitarbeiterin Sally gleichzeitig die
Datei sandwich.txt
. Sally übergibt
ihre Änderungen an das Projektarchiv, und sobald Sie versuchen,
Ihre Arbeitskopie zu aktualisieren, erhalten Sie einen
Konflikt und müssen sandwich.txt
bearbeiten, um den Konflikt aufzulösen. Zunächst wollen wir
uns die Datei einmal ansehen:
$ cat sandwich.txt Top piece of bread Mayonnaise Lettuce Tomato Provolone <<<<<<< .mine Salami Mortadella Prosciutto ======= Sauerkraut Grilled Chicken >>>>>>> .r2 Creole Mustard Bottom piece of bread
Die Zeichenketten aus Kleiner-als-Zeichen, Gleichheitszeichen und Größer-als-Zeichen sind Konfliktmarken und gehören nicht zu den eigentlichen Daten, die in Konflikt stehen. Im Allgemeinen werden Sie sicherstellen wollen, dass die Konflikte aus der Datei entfernt werden, bevor sie das nächste Mal eine Übergabe durchführen. Der Text zwischen den ersten beiden Marken besteht aus den Änderungen, die Sie im Konfliktbereich vorgenommen haben:
<<<<<<< .mine Salami Mortadella Prosciutto =======
Der Text zwischen der zweiten und der dritten Marke ist der Text aus Sallys Übergabe:
======= Sauerkraut Grilled Chicken >>>>>>> .r2
Für gewöhnlich werden Sie nicht einfach die Konfliktmarken mitsamt der Änderungen von Sally löschen wollen – sie wird furchtbar überrascht sein, wenn das Sandwich kommt und nicht das drauf ist, was sie wollte. Hier ist der Zeitpunkt gekommen, zu dem Sie zum Telefon greifen oder durch das Büro gehen und Sally erklären, dass man in einem italienischen Delikatessenladen kein Sauerkraut bekommt.[7] Sobald Sie sich über die zu übertragenden Änderungen einig sind, können Sie Ihre Datei bearbeiten und die Konfliktmarken entfernen:
Top piece of bread Mayonnaise Lettuce Tomato Provolone Salami Mortadella Prosciutto Creole Mustard Bottom piece of bread
Verwenden Sie jetzt svn resolve, und Sie sind bereit, Ihre Änderungen an das Projektarchiv zu übertragen:
$ svn resolve --accept working sandwich.txt Konflikt von »sandwich.txt« aufgelöst $ svn commit -m "Mach weiter mit meinem Sandwich, vergiss Sallys Änderungen."
Wenn Sie svn resolve verwenden, sollten Sie tunlichst darauf achten, Subversion nicht zu sagen, dass Sie den Koflikt aufgelöst hätten, wenn Sie es in Wirklichkeit gar nicht getan haben. Sobald die temporären Dateien entfernt sind, lässt Subversion zu, dass Sie die Datei in das Projektarchiv stellen, selbst wenn sie noch Konfliktmarken enthält.
Falls Sie mal bei der Bearbeitung der konfliktbehafteten Datei verwirrt sein sollten, können Sie jederzeit in den drei Dateien nachsehen, die Subversion für Sie in der Arbeitskopie bereitstellt – dazu gehört auch Ihre Datei vor der Aktualisierung. Sie können sogar ein Zusammenführungs-Werkzeug eines Drittanbieters verwenden, um diese drei Dateien zu untersuchen.
Falls Sie einen Konflikt erhalten und
entscheiden, dass Sie Ihre Änderungen verwerfen wollen,
können Sie svn resolve --accept theirs-full
aufrufen, und Subversion wird Ihre Änderungen ignorieren und
die temporären Dateien entfernen:CONFLICTED-PATH
$ svn update Konflikt in »sandwich.txt« entdeckt. Auswahl: (p) später auflösen, (df) Änderungen anzeigen, (e) Datei bearbeiten, (m) Zusammenführung, (mc) eigene Seite des Konflikts, (tc) fremde Seite des Konflikts (s) alle Optionen anzeigen: p C sandwich.txt Aktualisiert zu Revision 2. $ ls sandwich.* sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1 $ svn resolve --accept theirs-full sandwich.txt Konflikt von »sandwich.txt« aufgelöst $
Falls Sie sich entscheiden, Ihre Änderungen zu verwerfen und erneut mit der Bearbeitung zu beginnen (ob nach einem Konflikt oder sonst zu jeder Zeit), machen Sie einfach Ihre Änderungen rückgängig:
$ svn revert sandwich.txt Rückgängig gemacht: »sandwich.txt« $ ls sandwich.* sandwich.txt $
Beachten Sie, dass Sie beim Rückgängigmachen einer konfliktbehafteten Datei nicht svn resolve zu verwenden brauchen.
Endlich! Sie haben die Bearbeitung abgeschlossen, Sie haben alle Änderungen vom Server eingearbeitet, und Sie sind bereit, Ihre Änderungen an das Projektarchiv zu übertragen.
Der Befehl svn commit schickt all Ihre
Änderungen zum Projektarchiv. Wenn Sie eine Änderung
übertragen, müssen Sie einen Protokolleintrag erstellen, der
die Änderung beschreibt. Dieser Eintrag wird mit der von Ihnen
erzeugten neuen Revision verknüpft. Wenn Ihr
Eintrag kurz ist, können Sie ihn mit der Option
--message
(-m
) in der
Kommandozeile angeben:
$ svn commit -m "Corrected number of cheese slices." Sende sandwich.txt Übertrage Daten . Revision 3 übertragen.
Falls Sie jedoch Ihren Protokolleintrag während der Arbeit
in irgendeiner Textdatei erstellen möchten, können Sie
Subversion mitteilen, sich den Eintrag aus dieser Datei zu
holen, indem Sie ihren Namen mit der Option
--file
(-F
) angeben:
$ svn commit -F logmsg Sende sandwich.txt Übertrage Daten . Revision 4 übertragen.
Sollten Sie vergessen, entweder die Option
--message
(-m
) oder die
Option --file
(-F
)
anzugeben, startet Subversion automatisch Ihren
Lieblingseditor (siehe die Information zu
editor-cmd
in „Allgemeine Konfiguration“), damit Sie
einen Protokolleintrag erstellen können.
Tipp | |
---|---|
Wenn Sie gerade in Ihrem Editor einen Eintrag schreiben und sich entschließen, die Übergabe abzubrechen, können Sie einfach Ihren Editor beenden, ohne die Änderungen zu sichern. Falls Sie den Eintrag bereits gesichert haben sollten, löschen Sie einfach den gesamten Text, sichern Sie erneut und brechen dann ab: $ svn commit Logmeldung unverändert oder nicht angegeben A)bbrechen, Weitermac)hen, E)ditieren: a $ |
Das Projektarchiv weiß nicht, ob Ihre Änderung im Ganzen einen Sinn ergeben, es ist ihm auch egal; es überprüft lediglich, ob nicht irgendjemand anderes irgendeine derselben Dateien geändert hat wie Sie, als Sie mal weggeschaut haben. Falls jemand das gemacht hat, wird die gesamte Übergabe mit einer Meldung fehlschlagen, dass eine oder mehrere Ihrer Dateien nicht mehr aktuell sind:
$ svn commit -m "Noch eine Regel hinzufügen" Sende rules.txt Übertrage Daten . svn: E155011: Übertragen schlug fehl (Details folgen): svn: E155011: Datei »/home/sally/svn-work/sandwich.txt« ist veraltet …
(Der genaue Wortlaut dieser Fehlermeldung hängt vom verwendeten Netzwerkprotokoll und vom Server ab, doch die Bedeutung ist in allen Fällen gleich.)
Zu diesem Zeitpunkt müssen Sie svn
update
aufrufen, sich um eventuelle
Zusammenführungen oder Konflikte kümmern und die Übergabe
dann erneut versuchen.
Das deckt den grundlegenden Arbeitszyklus für die Verwendung von Subversion ab. Subversion bietet viele andere Möglichkeiten, die Sie benutzen können, um Ihr Projektarchiv und Ihre Arbeitskopie zu verwalten, doch der größte Teil Ihrer täglichen Arbeit mit Subversion wird lediglich die in diesem Kapitel behandelten Befehle berühren. Wir werden jedoch noch ein paar mehr Befehle behandeln, die Sie ziemlich oft verwenden werden.
[6] Sollten Sie den Wunsch haben, das Objekt
wiederauferstehen zu lassen, so das es wieder in
HEAD
vorhanden ist, siehe
„Zurückholen gelöschter Objekte“.
[7] Und wenn Sie danach fragen, wird man Sie wahrscheinlich auf einer Schiene aus der Stadt tragen.