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.

Name

svnmucc — Eine oder mehrere URL-basierte AKTIONen am Subversion-Projektarchiv vornehmen und das Ergebnis als eine (einzelne) neue Revision übertragen.

Übersicht

svnmucc AKTION...

Beschreibung

svnmucc ist ein Programm zum Ändern von durch Subversion versionierter Daten, ohne dabei eine Arbeitskopie zu verwenden. Es erlaubt die Ausführung von Operationen direkt auf den Projektarchiv-URLs der Dateien und Verzeichnisse, die der Anwender ändern möchte. Jeder Aufruf von svnmucc versucht, eine oder mehrere AKTIONen, wobei die Ergebnisse dieser kombinierten ACTIONen atomar als eine einzelne neue Revision übertragen werden.

Aktionen

svnmucc unterstützt die folgenden Aktionen (und damit zusammenhängende Argumente), die auf der Kommandozeile in geordneten Aneinanderreihungen kombiniert werden können:

cp REV SRC-URL DST-URL

Kopiere die Datei oder das Verzeichnis an der Stelle SRC-URL in Revision REV nach DST-URL.

mkdir URL

Erstelle ein neues Verzeichnis unter URL. Das Elternverzeichnis von URL muss bereits existieren (oder durch eine frühere Aktion von svnmucc erstellt worden sein), da dieser Befehl es nicht erlaubt, automatisch fehlende Zwischenverzeichnisse anzulegen.

mv SRC-URL DST-URL

Verschiebe die Datei oder das Verzeichnis von SRC-URL nach DST-URL.

rm URL

Lösche die Datei oder das Verzeichnis bei URL.

put SRC-FILE URL

Hinzufügen einer neuen Datei – oder Ändern einer existierenden – an der Stelle URL, wobei der Inhalt der lokalen Datei SRC-FILE als Inhalt der Erstellten oder geänderten Datei verwendet wird. Als Sonderfall kann SRC-FILE - sein, was svnmucc dazu veranlasst, von der Standardeingabe als aus einer lokalen Datei im Dateisystem zu lesen.

propset NAME VALUE URL

Setzt den Wert der Eigenschaft NAME beim Zielobjekt URL auf VALUE.

propsetf NAME FILE URL

Setzt den Wert der Eigenschaft NAME beim Zielobjekt URL auf den Inhalt der Datei FILE.

propdel NAME URL

Löscht die Eigenschaft NAME vom Zielobjekt URL.

Optionen

Die in der Kommandozeile von svnmucc angegebenen Optionen sind global für alle Aktionen, die durch diese Kommandozeile ausgelöst werden. Im Folgenden eine Liste der von diesem Werkzeug unterstützten Optionen:

--config-dir DIR

Konfigurationsinformationen aus dem angegebenen Verzeichnis lesen, anstatt aus dem standardmäßigen Ort (.subversion im Heimatverzeichnis des Anwenders.

--config-option CONFSPEC

Setzt für die Dauer des Kommandos den Wert einer Laufzeit-Konfigurationsoption. CONFSPEC ist eine Zeichenkette, die von der Konfigurationsoption den Namensraum, Namen und Wert angibt, den Sie zuweisen möchten, im Format DATEI:ABSCHNITT:OPTION=[WERT]. In dieser Syntax bedeuten DATEI und ABSCHNITT jeweils die Laufzeit-Konfigurationsdatei (entweder config oder servers) und der Abschnitt darin, der die Option beinhaltet, dessen Wert Sie ändern möchten. OPTION ist natürlich die Option selbst und WERT der Wert (falls vorhanden), den Sie der Option zuweisen möchten. Um beispielsweise vorübergehend die Verwendung der Kompression im HTTP-Protokoll zu unterbinden, verwenden Sie --config-option=config:global:http-compression=no. Sie können diese Option mehrfach verwenden, um gleichzeitig mehrere Optionswerte zu ändern.

--extra-args (-X) ARGFILE

Zusätzliche Kommandozeilenargumente aus der Datei ARGFILE lesen, wobei ein Argument pro Zeile angegeben ist. Als Sonderfall kann ARGFILE - sein, um anzugeben, das zusätzliche Argumente von der Standardeingabe zu lesen sind.

--file (-F) MSGFILE

Den Inhalt der Datei MSGFILE als Protokollnachricht für die Übertragung verwenden.

--help (-h, -?)

Zeige den Programmaufruf, danach beenden.

--message (-m) MSG

MSG als Protokollnachricht für die Übertragung verwenden.

--no-auth-cache

Das Zwischenspeichern von Authentisierungsinformationen (etwa Anwendernamen und Passwort) in den Laufzeitkonfigurationsverzeichnissen von Subversion verhindern.

--non-interactive

Sämtliche interaktiven Rückfragen (etwa nach Zugangsdaten) unterbinden.

--revision (-r) REV

Revision REV als Baseline-Revision für alle Änderungen durch die Aktionen von svnmucc machen. Dies ist eine wichtige Option, deren Verwendung sich Anwender angewöhnen sollten, sobald sie existierende versionierte Objekte ändern, um zu verhindern, dass ungewollt zeitgleiche Änderungen von Kollegen rückgängig gemacht werden.

--root-url (-U) ROOT-URL

ROOT-URL als Basis-URL verwenden, zu denen alle anderen URL-Ziele relativ sind. Dieser URL muss nicht der Wurzel-URL des Projektarchivs sein (wie er etwa von svn info angezeigt wird). Es kann irgend ein URL sein, den die verschiedenen bei den svnmucc-Aktionen angegebenen Ziele gemein haben.

--password (-p) PASSWD

PASSWD als Passwort bei der Authentisierung gegenüber einem Subversion-Server verwenden. Wird es nicht angegeben oder ist es nicht korrekt, wird Subversion gegebenenfalls nachfragen.

--username NAME

USERNAME als Anwendernamen bei der Authentisierung gegenüber einem Subversion-Server verwenden. Wird er nicht angegeben oder ist es nicht korrekt, wird Subversion gegebenenfalls nachfragen.

--version

Die Versionsinformation des Programms anzeigen und beenden.

--with-revprop NAME=VALUE

Den Wert der Revisionseigenschaft NAME bei der übertragenen Revision auf VALUE setzen.

Beispiele

Um den Inhalt einer Datei (sicher) ohne eine Arbeitskopie zu ändern, verwenden Sie svn cat, um den aktuellen Inhalt der Datei anzufordern und svnmucc put, um den geänderten Inhalt davon zu übertragen.

$ # Ein paar Hilfsvariablen setzen.
$ export FILEURL=http://svn.example.com/projects/sandbox/README
$ export BASEREV=`svn info ${FILEURL} | \
                  grep '^Last Changed Rev' | cut -d ' ' -f 2`
$ # Eine Kopie des aktuellen Inhalts holen.
$ svn cat ${FILEURL}@${BASEREV} > /tmp/README.tmpfile
$ # Bearbeiten der (kopierten) Datei.
$ vi /tmp/README.tmpfile
$ # Den neuen Inhalt unserer Datei übertragen.
$ svnmucc -r ${BASEREV} put README.tmpfile ${FILEURL} \
          -m "Tweak the README file."
r24 committed by harry at 2013-01-21T16:21:23.100133Z
# Aufräumen.
$ rm /tmp/README.tmpfile

Einen ähnlichen Ansatz zum Ändern der Eigenschaft einer Datei oder eines Verzeichnisses verfolgen. Verwenden Sie einfach svn propget und svnmucc propsetf statt svn cat bzw. svnmucc put.

$ # Ein paar Hilfsvariablen setzen.
$ export PROJURL=http://svn.example.com/projects/sandbox
$ export BASEREV=`svn info ${PROJURL} | \
                  grep '^Last Changed Rev' | cut -d ' ' -f 2`
$ # Eine Kopie des Werts der Verzeichniseigenschaft "license" holen.
$ svn -r ${BASEREV} propget license ${PROJURL} > /tmp/prop.tmpfile
$ # Die Eigenschaft ändern.
$ vi /tmp/prop.tmpfile
$ # Den neuen Wert der Eigenschaft übertragen.
$ svnmucc -r ${BASEREV} propsetf prop.tmpfile ${PROJURL} \
          -m "Tweak the project directory 'license' property."
r25 committed by harry at 2013-01-21T16:24:11.375936Z
# Aufräumen.
$ rm /tmp/prop.tmpfile

Lassen Sie uns nun ein paar Beispiele mit Mehrfachoperationen ansehen.

Um eine wanderndes Tag zu implementieren, bei dem ein einzelner Tag-Name zur Bezeichnung verschiedener Momentaufnahmen einer Code-Basis wiederverwendet wird (z.B., die letzte, aktuelle stabile Version), verwenden Sie svnmucc rm und svnmucc cp:

$ svnmucc -U http://svn.example.com/projects/doohickey \
          rm tags/latest-stable \
          cp HEAD trunk tags/latest-stable \
          -m "Das 'latest-stable' Tag weiterschieben."
r134 committed by harry at 2013-01-12T11:02:16.142536Z
$ 

Im vorigen Beispiel haben wir listigerweise die Verwendung der Option --root-url (-U) vorgestellt. Verwenden Sie diese Option, um einen Basis-URL anzugeben, zu dem alle anderen URLs der Operanden relativ sind (und ersparen Sie sich dadurch etwas Schreibarbeit).

Das Folgende zeigt ein Beispiel, wie svnmucc verwendet wird, um in einer einzelnen Revision Ihrem Projekt ein neues Tag hinzuzufügen, die eine frisch erzeugte Beschreibungsdatei beinhaltet, und ein Verzeichnis entfernt, das etwa nicht in eine Lieferung gehört.

$ echo "Dies ist Release 1.2.0." | \
       svnmucc -U http://svn.example.com/projects/doohickey \
               -m "Release 1.2.0 mit Tag versehen." \
               -- \
               cp HEAD trunk tags/1.2.0 \
               rm tags/1.2.0/developer-notes \
               put - tags/1.2.0/README.tag
r164 committed by cmpilato at 2013-01-22T05:26:15.563327Z
$ svn log -c 164 -v http://svn.example.com/projects/doohickey
------------------------------------------------------------------------
r164 | cmpilato | 2013-01-22 00:26:15 -0500 (Tue, 22 Jan 2013) | 1 line
Geänderte Pfade:
   A /tags/1.2.0 (from /trunk:163)
   A /tags/1.2.0/README.tag
   D /tags/1.2.0/developer-notes

Release 1.2.0 mit Tag versehen.
$ 

Das vorangegangene Beispiel zeigt nicht nur, wie mehrere unterschiedliche Dinge mit einem einzelnen Aufruf von svnmucc bewerkstelligt werden können, sondern auch, wie die Standardeingabe als Quelle für den Inhalt einer neuen Datei dienen kann. Beachten Sie das Vorhandensein von --, um anzuzeigen, dass keine weiteren Optionen auf der Kommandozeile folgen. Das wird benötigt, damit das nackte - der Aktion svnmucc put nicht als fehlerhafter Optionsindikator interpretiert wird.