SVN über Kommandozeile
Die folgende Anleitung präsentiert das Nutzen von SVN in einer Shell auf dem ASL am Beispiel von DBD-Dateien
Grundsätzlich Syntax
Alle Kommandos von SVN haben die Form:
svn Kommando [Parameter]
.
Beim ersten Mal muss man sich beim Zugriff über Kommandozeile authentifizieren. Hier wird der Linux-Username als User angenommen. Das ist im Normalfall richtig. Achtung! Benutzernamen sind case-sensitiv und bei uns komplett klein geschrieben.
Authentication realm: <https://www-acc.gsi.de> GSI Accelerator Repository
Password for 'hoeppner': **** <Enter>
Diese Daten werden gemerkt, man muss diese Daten daher nur einmal eingeben!
Inhalt anzeigen
svn ls https://www-acc.gsi.de/svn/bel/trunk/
listet alle Verzeichnisse im Trunk auf.
Projekt auschecken
svn checkout https://www-acc.gsi.de/svn/bel/trunk/dbd pumuckl
A pumuckl/ktrcg01.dbd
A pumuckl/ke3cg01.dbd
A pumuckl/kuecg01.dbd
A pumuckl/k4xcg01.dbd
Checked out revision 5593.
Parameter sind der Pfad innerhalb des Repositories und das lokale Verzeichnis, in das ausgecheckt werden soll, hier
pumuckl
)
(Kurzform:
svn co ...
)
Dateien bearbeiten
Im folgenden wird angenommen: Die Datei
ktrcg01.dbd
wird geändert, die Datei
ktrcg99.dbd
wird neu angelegt.
Alle wesentlichen Änderungen sind über den Status sichtbar:
[hoeppner@asl710 pumuckl]$ svn status
? ktrcg99.dbd
M ktrcg01.dbd
Das Fragezeichen heißt, dass die erste Datei noch nicht unter Versionskontrolle steht, das M bedeutet, dass die zweite Datei seit dem Auschecken modifiziert wurde. Will man nun wissen, was man an
ktrcg01.dbd
geändert hat, so geht das über den Befehl:
[hoeppner@asl710 pumuckl]$ svn diff ktrcg01.dbd
Index: ktrcg01.dbd
===================================================================
--- ktrcg01.dbd (revision 5593)
+++ ktrcg01.dbd (working copy)
@@ -63,8 +63,8 @@
/dev TR2KY2 4
/dev TR2KX3 5
/dev TR2KY3 6
-/con -13.0 ! Imin in Ampere
- 13.0 ! Imax in Ampere
+/con -14.0 ! Imin in Ampere
+ 14.0 ! Imax in Ampere
0.0 ! Imin Konditionierung
0x0002 ! device subtype is bipolar
Man sieht hier also, dass der Betrag von Imin bzw. Imax jeweils von 13 auf 14 geändert wurde, das Minuszeichen kennzeichnet also den Stand nach dem Auschecken, das Pluszeichen den neuen Stand.
Dateien zur Versionsverwaltung hinzufügen
Die Datei
ktrcg99.dbd
unterliegt noch nicht der Versionsverwaltung. Um dies zu ändern, sagt man:
[hoeppner@asl710 pumuckl]$ svn add ktrcg99.dbd
A ktrcg99.dbd
Ab sofort zeigt der SVN-Status-Befehl diese Datei auch nicht mehr mit Fragezeichen, sondern
A
an, um darauf hinzuweisen, dass
beim nächsten Commit diese Datei hochgeladen wird.
Änderungen rückgängig machen
Hat man bemerkt, dass die Änderung der Stromwerte in
ktrcg01.dbd
falsch war, kann man zum Ausgangsstand zurück, solange man kein Commit gemacht hat:
[hoeppner@asl710 pumuckl]$ svn revert ktrcg01.dbd
Reverted 'ktrcg01.dbd'
Dateien umbenennen
Der Rechner ktrcg01 heißt ab sofort ktrcg88, sonst ändert sich nichts, also soll die DBD-Datei umbenannt werden:
[hoeppner@asl710 pumuckl]$ svn move ktrcg01.dbd ktrcg88.dbd
A ktrcg88.dbd
D ktrcg01.dbd
[hoeppner@asl710 pumuckl]$ svn status
A + ktrcg88.dbd
D ktrcg01.dbd
Auf den ersten Blick sieht dies so aus, als ob das einfach dem Löschen der alten und dem Hinzufügen der Datei unter neuem Namen entspricht, aber bei dieser Methode behält die Datei ihre Historie, d.h. trotz Umbenennung sind vorher statt gefundene Änderungen weiter verfolgbar.
Commit der aktuellen Version
Egal was passiert, alle Änderungen bleiben lokal in der Arbeitskopie, solange kein Commit gemacht wird:
[hoeppner@asl710 pumuckl]$ svn commit
svn: Commit failed (details follow):
svn: Could not use external editor to fetch log message; consider setting the
$SVN_EDITOR environment variable or using the --message (-m) or --file (-F)
options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set,
and no 'editor-cmd' run-time configuration option was found
Hier stolpert man darüber, dass man die Umgebungsvariable EDITOR (oder eine andere der genannten) nicht gesetzt hat, und SVN daher nicht weiß, wo es die Log-Message für den Commit hernehmen soll.
Lösungsmöglichkeiten:
Die letzte Variante hilf natürlich für immer.
Hat man das Editor-Problem gelöst, so erhält man im eingestellten Editor folgenden Inhalt präsentiert:
--This line, and those below, will be ignored--
A + ktrcg88.dbd
D ktrcg01.dbd
Alles was oberhalb der Zeile, in der steht, das alles darunter ignoriert wird, hingeschrieben wird, stellt die Log-Message dar, die dem Commit mitgegeben wird. Unten werden noch einmal die Änderungen dargestellt, die der Commit im Repository anstellt. Dies ist also die Gelegenheit, noch einmal inne zu gehen und sich klar zu werden, ob man weiß, was man tut.
Probleme beim Commit
Ein Commit kann nicht durchgeführt werden, wenn zwischen dem Checkout und Commit sich das Projekt im Repository geändert hat.
Dann muss man vorher ein
svn update
durchführen. Hierbei werden die lokalen und Remote-Änderungen zusammengeführt, was auch schief gehen kann. Ab hier sollte man jemand fragen, der sich auskennt.