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:
  • Log-Message mit -m übergen, z.B.
    svn commit -m 'imax changed'
  • Umgebungsvariable EDITOR setzen, z.B.
    export EDITOR=vi
  • In
    ~/.subversion/config
    im Abschnitt
    [helpers]
    den Eintrag editor-cmd setzen, also
    editor-cmd = vi
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.

This topic: Frontend > PPCDevelopments > TippsRufbereitschaft > SvnCommandline
Topic revision: 18 Aug 2011, UnknownUser
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback