58 votes

Puis-je revenir en arrière et modifier les commentaires d'un checkin SVN ?

J'ai mis une erreur dans un commentaire dans le SVN. Puis-je l'éditer après l'archivage ?

65voto

Paul Dixon Points 122033

Les messages d'engagement sont "propriétés non versionnées" et peuvent être modifiées avec l'option svn propset par exemple

$ svn propset --revprop -r 25 svn:log "Journaled about trip to New York."
property 'svn:log' set on repository revision '25'

Ceci définit la propriété de révision appelée "svn:log" sur la révision 25.

Configuration de subversion pour permettre les changements de propriétés de révision

Parce qu'elles ne sont pas versionnées, une installation par défaut de subversion ne vous laissera pas modifier ces propriétés à moins que vous ne fournissiez un fichier pré-revprop-change crochet script.

Voici un script typique, provenant de /var/lib/svn/hooks/pre-revprop-change sur mon système :

#!/bin/sh

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then 
  echo "$1 $2 $3 $4 $5" >> /var/lib/svn/logchanges.log
  exit 0; 
fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

Cela enregistre les changements des propriétés de révision de svn:log, et autorise la modification en utilisant la sortie 0, tout autre changement de propriété de révision est refusé en utilisant la sortie 1. Voir la réponse de patmortech pour un équivalent Windows.

56voto

patmortech Points 7482

Pour activer la modification de la propriété de révision, vous devez créer un hook pre-revprop-change script. Vous pouvez lire à ce sujet ici : http://svnbook.red-bean.com/en/1.0/ch05s02.html (cherchez la section Hook scripts).

Pour Windows, voici un lien vers un exemple de fichier batch qui permet uniquement de modifier le message du journal (pas les autres propriétés) : http://ayria.livejournal.com/33438.html . Copiez le code ci-dessous dans un fichier texte, nommez-le pre-revprop-change.bat et enregistrez-le dans le sous-répertoire /hooks de votre référentiel.

@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5

:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME

:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION

:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY

goto :eof

:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

23voto

Kit Roed Points 1922

Une façon d'effectuer un changement rapide du message du journal sans avoir à créer un hook script pré-revprop-change est d'utiliser le suivant svnadmin commande :

svnadmin setlog --bypass-hooks REPOS_PATH -r N FILE

donde REPOS_PATH est le chemin d'accès au référentiel sur le serveur (par exemple /srv/svn/repository) et N est le numéro de révision (par exemple 25) et FILE est un fichier texte contenant l'entrée correcte du journal de livraison.

Deux choses : Cela nécessite un accès au système de fichiers aux fichiers du référentiel, mais il en va de même pour la création d'un hook script pré-revprop-change... et deuxièmement, cette commande contournera tout hook script qui pourrait être en place, donc à utiliser à bon escient....

9voto

Dan Points 156

L'utilisation de Tortoise SVN rendra cela très très facile pour vous. Il suffit de faire apparaître la fenêtre des messages du journal, de faire un clic droit sur le journal de révision que vous souhaitez éditer, et de choisir Editer le journal dans le menu contextuel.

5voto

Milen A. Radev Points 20462

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X