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.
svnmucc — Effectuer une ou plusieurs actions sur un dépôt Subversion et propager les modifications résultantes dans une nouvelle révision atomique.
svnmucc
ACTION…
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
ACTION
s, en propageant de manière atomique
les modifications résultantes dans une unique nouvelle
révision.
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 :
REV
URL_SRC
URL_DST
Copier le fichier ou dossier situé à
URL_SRC
dans la révision
REV
vers
URL_DST
.
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.
.
URL_SRC
URL_DST
Déplacer le fichier ou dossier situé à
SRC-URL
vers
DST-URL
.
URL
Effacer le fichier ou dossier situé à
URL
.
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.
NOM_PROPRIÉTÉ
VALEUR
URL
Définir la valeur de la propriété
NOM_PROPRIÉTÉ
de l'élément situé à
URL
à VALEUR
.
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
.
NOM_PROPRIÉTÉ
URL
Effacer la propriété NOM_PROPRIÉTÉ
de l'élément situé à URL
.
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 (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 compression dans le protocole
HTTP, utilisez
--config-option=servers:global:http-compression=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 commentaire de
propagation.
--help
(-h
,
-?
)
Afficher le mode d'emploi du programme et terminer.
--message
(-m
)
MSG
Utiliser MSG
comme commentaire
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.
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.