2009-03-16 12 views
8

He creado un archivo llamado version.ini que está bajo control de versión (/trunk/version.ini) ahora quería hacer un enganche post commit para actualizar ese archivo con el ultima versión. Pero no sé qué comando puede hacer eso. Sé que tengo este parámetro:post commit hook para actualizar un archivo en la versión

#!/bin/sh 

REPOS = "$1" 
REV = "$2" 

Pero, ¿cómo puedo reemplazar el contenido de ese archivo sin hacer una nueva revisión? y todavía tienen esos cambios en mi repo?

ACTUALIZACIÓN: Desde tal vez no he tenido claro que voy a probar un explination más detallada: Digamos que tengo esta repo:/svn/repos/proyecto/trunk/y en ella tengo un archivo llamado version.ini que está bajo control de versión. Lo que quiero hacer es que en cada commit actualice ese archivo a la nueva revisión. Digamos que la revisión actual es 263. Quiero que el archivo tenga 263 escritos en él. Y para responder a una respuesta de abajo no puedes usar palabras clave ya que solo funcionan si actualizo ese archivo y no quiero hacerlo.

Espero que tenga sentido, y gracias por toda la ayuda brindada. Cheers

+0

Su pregunta no está clara. Los ganchos son para hacer algo del lado del servidor. La actualización de un archivo en el repositorio es una acción de cliente a servidor. –

Respuesta

7

Lo que realmente desea no es una forma de modificar sus confirmaciones, sino algo así como svn:keywords. Lamentablemente, como puede leer en el cuadro "¿Dónde está $ GlobalRev $?" esto realmente no hace lo que quieres. En su lugar, tendrá que escribir un script para llamar y analizar el resultado de svnversion y de alguna manera poner el resultado en sus archivos como parte de la compilación.

Ahora, para responder a su pregunta literal es divertido pensar en lo que puede y no puede hacer en scripts gancho svn:

No se puede cambiar de una confirmación de una post-commit hook

En el momento en que se ejecuta el enganche post-commit, la confirmación ya se ha finalizado (como su nombre lo indica), por lo que no es posible cambiar los archivos. Solo puedes inspeccionar los cambios en este punto.

No se puede modificar compromete a la espera de un gancho pre-confirmación ya sea

Puede examinar el contenido de una transacción pendiente de un gancho pre-commit con la función svnlook con el interruptor --transaction , pero no puedes cambiarlo

Si se pudieran realizar cambios arbitrarios en un enlace precompromiso, obviamente el servidor necesitaría informar estos cambios al cliente svn. De lo contrario, el cliente pensaría que sus archivos están en la revisión comprometida, mientras que en realidad son diferentes. Si el cliente svn aceptara dichos cambios informados, esto llevaría a la posibilidad de que su trabajo sea aniquilado por un commit. Esa sería una característica sorprendente para un sistema de control de versiones, por decirlo suavemente. No hace falta decir que la subversión no permite esto.

5

No hay forma de cambiar nada en el repositorio sin modificar el número de revisión.

La solución es poner special keywords (buscar svn:keywords) en el archivo y hacer que SVN los reemplace durante la comprobación. Parecerá que estos valores provienen del repositorio, pero la representación del archivo en el repositorio no cambiará.

Probablemente estés buscando $ LastChangedRevision $ (o $ Rev $ para abreviar).

Otra solución es añadir una regla a su herramienta de construcción/Makefile/lo que sea que utiliza svn info en el directorio raíz de su proyecto para determinar la revisión actual y pone eso en un archivo temporal (que es no añadido a su repo).

+0

no va a funcionar ... ya que tengo que modificar ese archivo para reemplazar las palabras clave –

+0

SVN lo hará por usted cuando svn: keywords esté configurado correctamente. –

+0

Es como un filtro que le permite ver cosas en el repositorio que no están realmente allí. –

Cuestiones relacionadas