This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

Nom

svnmucc — Effectuer une ou plusieurs actions sur un dépôt Subversion et propager les modifications résultantes dans une nouvelle révision atomique.

Synopsis

svnmucc ACTION...

Description

svnmucc est un programme pour modifier des données suivies en versions par Subversion sans utiliser une copie de travail. Il permet d'effectuer les opérations directement via les URL des fichiers et dossiers du dépôt que l'utilisateur souhaite modifier. Chaque invocation de la commande svnmucc tente une ou plusieurs ACTIONs, en propageant de manière atomique les modifications résultantes dans une unique nouvelle révision.

Actions

svnmucc comprend les actions suivantes (et leurs paramètres), qui peuvent être combinées dans des séquences ordonnées dans la ligne de commande :

cp REV URL_SRC URL_DST

Copier le fichier ou dossier situé à URL_SRC dans la révision REV vers URL_DST.

mkdir URL

Créer un nouveau dossier à URL. Le dossier parent de URL doit déjà exister (ou avoir été créé par une action svnmucc précédente) car cette commande ne permet pas de créer automatiquement les dossiers parents intermédiaires manquants. .

mv URL_SRC URL_DST

Déplacer le fichier ou dossier situé à SRC-URL vers DST-URL.

rm URL

Effacer le fichier ou dossier situé à URL.

put FICHIER_SOURCE URL

Ajouter un nouveau fichier (ou modifier un fichier existant) situé à URL en copiant le contenu du fichier local SRC-FILE. Notez que SRC-FILE peut valoir - pour que svnmucc lise l'entrée standard plutôt qu'un fichier du système de fichiers local.

propset NOM_PROPRIÉTÉ VALEUR URL

Définir la valeur de la propriété NOM_PROPRIÉTÉ de l'élément situé à URL à VALEUR.

propset NOM_PROPRIÉTÉ FICHIER URL

Définir la valeur de la propriété NOM_PROPRIÉTÉ de l'élément situé à URL au contenu du fichier FICHIER.

propdel NOM_PROPRIÉTÉ URL

Effacer la propriété NOM_PROPRIÉTÉ de l'élément situé à URL.

Options

Les options spécifiées sur une ligne de commande à svnmucc sont globales à toutes les actions effectuées par cette ligne de commande. La liste des options comprises par cet outil est la suivante :

--config-dir REP

Lire la configuration dans le répertoire spécifié plutôt qu'à l'endroit par défaut (.subversion dans le répertoire de l'utilisateur).

--config-option CONFSPEC

Définir, pour la durée de la commande, la valeur d'une option de configuration. CONFSPEC est une chaîne de caractères qui spécifie l'espace de nom de l'option de configuration, son nom et la valeur que vous voulez lui assigner, formatée ainsi : FICHIER:SECTION:OPTION=[VALEUR] Dans cette syntaxe, FICHIER et SECTION sont des fichiers de la zone de configuration (soit config ou servers) et de la section où se trouve l'option dont vous voulez changer la valeur. OPTION est, bien sûr, le nom de l'option elle-même et VALEUR est la valeur (si vous la donnez) que vous voulez assigner à l'option. Par exemple, pour désactiver temporairement la définition automatique des propriétés, utilisez --config-option=config:miscellany:enable-auto-props=no. Vous pouvez utiliser cette option plusieurs fois pour modifier les valeurs de plusieurs options temporairement.

--extra-args (-X) FICHIER_ARGS

Lire les arguments supplémentaires (qu'on aurait placés dans la ligne de commande) dans FICHIER_ARGS, un argument par ligne. Notez que FICHIER_ARGS peut valoir - pour indiquer que les arguments supplémentaires doivent être lus depuis l'entrée standard.

--file (-F) FICHIER_MSG

Utiliser le contenu de FICHIER_MSG comme message de propagation.

--help (-h, -?)

Afficher le mode d'emploi du programme et terminer.

--message (-m) MSG

Utiliser MSG comme message de propagation.

--no-auth-cache

Ne pas conserver les éléments d'authentification (par exemple l'identifiant et le mot de passe) dans les zones de configuration de Subversion.

--non-interactive

Ne rien demander de manière interactive (par exemple identifiant et mot de passe).

--revision (-r) REV

Utiliser REV comme révision de base pour toutes les modifications faites via les actions svnmucc. Cette option est particulièrement importante et son utilisation est vivement encouragée pour modifier des éléments suivis en versions, afin d'éviter d'annuler des changements faits de manière concomittante par les autres membres de l'équipe.

--root-url (-U) URL_RACINE

Utiliser URL_RACINE comme URL de référence. Les autres cibles seront relatives à cette URL. Cette URL n'a pas besoin d'être l'URL racine du dépôt (celle qui est indiquée par svn info). Ce peut être n'importe quelle URL commune aux différentes cibles qui sont spécifiées dans les actions svnmucc.

--password (-p) MOT_DE_PASSE

Spécifie le mot de passe à utiliser pour s'authentifier auprès d'un serveur Subversion. Si le mot de passe n'est pas fourni ou s'il est incorrect, Subversion vous demandera cette information quand il en aura besoin.

--username IDENTIFIANT

Spécifie l'identifiant (ou nom d'utilisateur) à utiliser pour s'authentifier auprès d'un serveur Subversion. S'il n'est pas fourni ou s'il est incorrect, Subversion vous demandera cette information quand il en aura besoin.

--version

Afficher les informations sur la version du programme et terminer.

--with-revprop NOM_PROPRIÉTÉ=VALEUR

Définir la valeur de la propriété de révision NOM_PROPRIÉTÉ à VALEUR dans la révision qui est propagée.

Exemples

Pour modifier le contenu d'un fichier (de manière sûre) sans utiliser de copie de travail, utilisez svn cat pour récupérer le contenu actuel du ficheir et svnmucc put pour propager le contenu modifié.

$ # Définir quelques variables utiles
$ export URL_FICHIER=http://svn.exemple.com/projets/bac-à-sable/LISEZMOI
$ export REV_BASE=`LC_ALL=C svn info ${URL_FICHIER} | \
                   grep '^Last Changed Rev' | cut -d ' ' -f 2`
$ # Obtenir une copie du fichier avec son contenu actuel
$ svn cat ${URL_FICHIER}@${REV_BASE} > /tmp/LISEZMOI.tempo
$ # Modifier le fichier (copié)
$ vi /tmp/LISEZMOI.tempo
$ # Propager le nouveau contenu du fichier.
$ svnmucc -r ${REV_BASE} put LISEZMOI.tempo ${URL_FICHIER} \
          -m "Quelques modifs dans LISEZMOI."
r24 committed by harry at 2013-01-21T16:21:23.100133Z
$ # Un peu de nettoyage pour terminer.
$ rm /tmp/LISEZMOI.tempo

Appliquer une démarche similaire pour modifier une propriété de fichier ou de dossier. Utiliser simplement svn propget et svnmucc propsetf au lieu de svn cat et svnmucc put.

$ # Définir quelques variables utiles
$ export URL_PROJET=http://svn.exemple.com/projets/bac-à-sable
$ export REV_BASE=`LC_ALL=C svn info ${URL_PROJET} | \
                   grep '^Last Changed Rev' | cut -d ' ' -f 2`
$ # Obtenir une copie du fichier avec son contenu actuel
$ svn -r {REV_BASE} propget license ${URL_PROJET} > /tmp/prop.tempo
$ # Modifier la valeur de la propriété
$ vi /tmp/prop.tempo
$ # Propager la nouvelle valeur de propriété.
$ svnmucc -r ${REV_BASE} propsetf prop.tempo ${URL_PROJET} \
          -m "Modifié la propriété Licence de la racine du projet."
r25 committed by harry at 2013-01-21T16:24:11.375936Z
$ # Un peu de nettoyage pour terminer.
$ rm /tmp/prop.tempo

Regardons maintenant quelques exemples avec plusieurs opérations.

Pour implémenter une « étiquette mobile » où une unique étiquette évolue pour pointer vers différents instantanés (par exemple la dernière version stable) d'un projet, utilisez svnmucc rm et svnmucc cp:

$ svnmucc -U http://svn.exemple.com/projets/bidule \
          rm tags/dernière-stable \
          cp HEAD trunk tags/dernière-stable \
          -m "Ajusté l'étiquette 'dernière-stable'."
r134 committed by harry at 2013-01-12T11:02:16.142536Z
$

Dans l'exemple supra, nous avons subtilement introduit l'option --root-url (-U). Vous pouvez utiliser cette option pour définir une URL de référence par rapport à laquelle toutes les autres URL seront relatives (cela vous fera aussi gagner quelques caractères dans la ligne de commande).

L'exemple infra montre l'utilisation de svnmucc pour, en une seule propagation, créer une nouvelle version étiquetée pour le projet qui inclut un fichier de description nouveau et efface un dossier qui ne doit pas apparaître dans, disons, une archive publiée.

$ echo "Création de la version publiée 1.2.0." | \
       svnmucc -U http://svn.exemple.com/projets/bidule \
               -m "Création de la version étiquetée 1.2.0." \
               -- \
               cp HEAD trunk tags/1.2.0 \
               rm tags/1.2.0/notes-de-développements \
               put - tags/1.2.0/LISEZMOI.tag
r164 committed by cmpilato at 2013-01-22T05:26:15.563327Z
$ svn log -c 164 -v http://svn.exemple.com/projets/bidule
------------------------------------------------------------------------
r164 | cmpilato | 2013-01-22 00:26:15 -0500 (mar. 22 jan 2013) | 1 ligne
Chemins modifiés :
   A /tags/1.2.0 (de /trunk:163)
   A /tags/1.2.0/LISEZMOI.tag
   D /tags/1.2.0/notes-de-développement

Création de la version étiquetée 1.2.0.
$

L'exemple supra montre non seulement comment effectuer différentes actions dans une seule ligne de commande svnmucc mais aussi l'utilisation de l'entrée standard pour définir le contenu d'un nouveau fichier. Notez la présence de -- pour indiquer la fin des options dans la ligne de commande. C'est nécessaire pour que le - de svnmucc put ne soit pas interprété comme un indicateur d'une nouvelle option.