Pregunta ¿Cómo editar el mensaje de registro ya cometido en Subversion?


¿Hay alguna manera de editar el mensaje de registro de una determinada revisión en Subversion? Accidentalmente escribí el nombre de archivo incorrecto en mi mensaje de confirmación, lo que podría ser confuso más tarde.

He visto ¿Cómo edito un mensaje de confirmación incorrecto en Git?, pero la solución a esa pregunta no parece ser similar para Subversion (según svn help commit)


512
2017-11-20 05:13


origen


Respuestas:


Básicamente, debe tener derechos de administrador (directa o indirectamente) en el repositorio para hacerlo. Puede configurar el repositorio para permitir que todos los usuarios lo hagan, o puede modificar el mensaje de registro directamente en el servidor.

Ver esta parte del Preguntas frecuentes sobre Subversion (énfasis mío):

Los mensajes de registro se guardan en   repositorio como propiedades adjuntas a   cada revisión. Por defecto, el registro   propiedad de mensaje (svn: log) no puede ser   editado una vez que está comprometido. Es decir   porque los cambios en las propiedades de revisión   (de los cuales svn: log es uno) causa el   valor anterior de la propiedad para ser   permanentemente descartado, y Subversion   intenta evitar que hagas esto   accidentalmente. Sin embargo, hay un   un par de formas de obtener Subversion   cambiar una propiedad de revisión.

La primera forma es para el repositorio   administrador para habilitar la revisión   modificaciones de propiedad. Esto esta hecho   creando un gancho llamado   "pre-revprop-change" (ver esta sección   en el libro de Subversion por más   detalles sobre cómo hacer esto). los   El gancho "pre-revprop-change" tiene acceso   al viejo mensaje de registro antes de que sea   cambiado, por lo que puede preservarlo en algunos   manera (por ejemplo, enviando un   correo electrónico). Una vez propiedad de revisión   las modificaciones están habilitadas, puedes   cambiar el mensaje de registro de una revisión por   pasando el conmutador --revprop a svn   propedit o svn propset, como cualquiera   uno de estos:

$svn propedit -r N --revprop svn:log URL 
$svn propset -r N --revprop svn:log "new log message" URL 

donde N   es el número de revisión cuyo registro   mensaje que desea cambiar, y la URL es   la ubicación del repositorio. Si tu   ejecutar este comando desde dentro de un trabajo   copia, puede dejar fuera de la URL.

La segunda forma de cambiar un registro   el mensaje es usar svnadmin setlog.    Esto debe hacerse haciendo referencia a la   ubicación del repositorio en el   sistema de archivos No puedes modificar un control remoto   repositorio usando este comando.

$ svnadmin setlog REPOS_PATH -r N FILE

donde REPOS_PATH es el repositorio   ubicación, N es el número de revisión   cuyo mensaje de registro desea cambiar,   y FILE es un archivo que contiene el nuevo   mensaje de registro Si el   el gancho "pre-revprop-change" no está en   lugar (o si desea eludir el enganche   script por alguna razón), también puede   use la opción --bypass-hooks.   Sin embargo, si decides usar esto   opción, ten mucho cuidado Usted puede ser   eludiendo cosas tales como el correo electrónico   notificaciones del cambio o respaldo   sistemas que hacen un seguimiento de la revisión   propiedades.


423
2017-11-20 05:16



Cuando ejecuta este comando,

svn propedit svn:log --revprop -r NNN 

y en caso de que veas este mensaje:

La solicitud DAV falló; es posible que   el cambio previo al revolver del repositorio   el enganche falló o no existe

Es porque Subversion no te permite modificar los mensajes de registro porque no están versionados y se perderán de forma permanente.

Vaya al directorio de ganchos en su servidor Subversion (reemplace ~ / svn / reponame con el directorio de su repositorio)

cd ~/svn/reponame/hooks

Eliminar la extensión

mv pre-revprop-change.tmpl pre-revprop-change

Hazlo ejecutable (no se puede hacer chmod + x!)

chmod 755 pre-revprop-change

Fuente


77
2018-06-18 21:54



Aquí hay una variación útil que no veo mencionada en las preguntas frecuentes. Puede devolver el mensaje actual para su edición especificando un editor de texto.

svn propedit svn:log --revprop -r N --editor-cmd vim

41
2018-04-12 21:37



svnadmin setlog /path/to/repository -r revision_number --bypass-hooks message_file.txt

35
2017-11-20 05:17



Recientemente me han encargado esto también.

Queríamos permitir que nuestros programadores modifiquen solo sus propios mensajes de compromiso y restrinjan qué tan atrás pueden hacerlo. Decidimos que se les permitiría modificar cualquier mensaje de registro cometido ese día, para corregir errores tipográficos, etc.

Después de mirar un par de otros ejemplos en línea, lo pirateé, estamos en un entorno de Windows, así que este es nuestro contenido de pre-revprop-change.bat:

@ECHO OFF

set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow user to modify their own log messages
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set AUTHOR=
for /f "delims=" %%a in ('svnlook author -r %REV% %REPOS%') do @set AUTHOR=%%a

if /I not '%AUTHOR%'=='%user%' goto ERROR_WRONGUSER

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow user to modify log messages from today, old messages locked down
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set DATESTAMP=
for /f "delims=" %%a in ('svnlook date -r %REV% %REPOS%') do @set DATESTAMP=%%a

for /F "tokens=1-2 delims= " %%a in ("%DATESTAMP%") do (
 set DATESTAMPDATE=%%a
 set DATESTAMPTIME=%%b )

:: Expects DATESTAMPDATE in the format: 2012-02-24
for /F "tokens=1-3 delims=-" %%a in ("%DATESTAMPDATE%") do (
 set DATESTAMPYEAR=%%a
 set DATESTAMPMONTH=%%b
 set DATESTAMPDAY=%%c )

:: Expects date in the format: Thu 08/01/2013
for /F "tokens=1-4 delims=/ " %%a in ("%date%") do (
 set YEAR=%%d
 set MONTH=%%b
 set DAY=%%c )

if /I not '%DATESTAMPYEAR%'=='%YEAR%' goto ERROR_MSGTOOOLD
if /I not '%DATESTAMPMONTH%'=='%MONTH%' goto ERROR_MSGTOOOLD
if /I not '%DATESTAMPDAY%'=='%DAY%' goto ERROR_MSGTOOOLD

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
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 properties are not allowed. >&2
goto ERROR_EXIT

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

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

:ERROR_WRONGUSER
echo You are not allowed to modify other user's log messages. >&2
goto ERROR_EXIT

:ERROR_MSGTOOOLD
echo You are not allowed to modify log messages older than today. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1 

Editar: idea original para esto vino de este hilo:


16
2017-08-01 21:55



Si está usando un IDE como eclipse, puede usar esta manera fácil.

Right click on the project -> Team - Show history

En eso right click on the revision id for your commit and select 'Set commit properties'.

Puede modificar el mensaje como desee desde aquí.


12
2017-12-26 11:25



En Windows, usando el cliente Tortoise SVN:

  1. haga clic derecho en su carpeta de proyecto y elija "Mostrar registro"
  2. en la ventana de Mensajes de registro, haga clic derecho en una revisión y elija "Editar mensaje de registro"

Si no funciona, podría deberse a la forma en que SVN está configurado en el servidor, lea aquí otras respuestas.


12
2017-09-15 06:06



Si su repositorio permite configurar las propiedades de revisión a través del gancho de cambio de preprogramación, puede cambiar los mensajes de registro mucho más fácilmente.

svn propedit --revprop -r 1234 url://to/repository

O en TortoiseSVN, AnkhSVN y probablemente muchos otros clientes de subversión haciendo clic derecho en una entrada de registro y luego "cambiar el mensaje de registro".


7
2017-11-20 10:32