two tortoise tag subversion hacer entre diferencia create branches svn

tortoise - svn branches tags trunk



Siempre cometer el mismo archivo con SVN (13)

Esto funciona bien excepto que, si no hago ningún cambio en ese archivo, no se compromete.

Si el archivo nunca cambia, ¿por qué lo necesitarías para comunicarte cada vez?

[EDITAR] @Sean = Entiendo lo que intenta hacer, pero si el archivo nunca se actualiza a través de un gancho u otro proceso y, por lo tanto, nunca cambia, SVN no lo detectará.

En mi aplicación web tengo un archivo que contiene el número de revisión actual a través de $ Rev $. Esto funciona bien excepto que, si no hago ningún cambio en ese archivo, no se compromete.

¿Hay alguna forma de obligar a un solo archivo a comprometerse siempre con el servidor SVN?

Estoy usando TortoiseSVN para Windows, por lo que cualquier código o instrucciones paso a paso serían útiles.



@gradonmantank: Porque quiere que ese archivo se actualice con el último número de revisión. ¿Leíste su pregunta por completo?

El gancho de precompromiso podría funcionar.


Citar el archivo no te haría ningún bien. El archivo no está comprometido con la versión completa en el interior, sino que se reemplaza con solo la palabra clave. Si miras el archivo dentro del repositorio, verás esto.

Como tal, necesita forzar que el archivo se actualice de alguna manera en su lugar.

Si está en la plataforma de Windows, puede usar la herramienta SubWCRev, distribuida con TortoiseSVN. Documentación aquí .


Dependiendo de su cliente, algunos de ellos ofrecen un gancho precompromiso para que pueda implementar algo que simplemente "toque" el archivo y lo marque como modificado. Si utilizas algo como Visual Studio, podrías crear una tarea de compilación posterior que "tocaría" el archivo, pero tendrías que asegurarte de hacer una compilación antes de realizar cambios.


Puede usar svn pre-commit-hooks para hacerlo.
La idea general que tengo en mente es crear una que antes de la confirmación ponga el nuevo número de revisión en el archivo (lo obtenga usando svnlook) o tal vez cambie una propiedad falsa en el archivo (tiene que cambiar o SVN lo ignorará).

Para más información sobre pre-commit-hooks encontré esta página útil.


Solía ​​tener una forma manual de hacer eso. Ejecutaría un script que usaría sed para reemplazar un comentario con la marca de tiempo actual en mi archivo $ Rev $. De esta forma, el contenido del archivo cambiaría y Subversion lo confirmaría.

Lo que no hice fue llevarlo al siguiente paso: usar los ganchos de repositorio de Subversion para automatizar el proceso. El problema es que no estoy seguro de si puedes cambiar el contenido del archivo en ganchos. La documentación parece sugerir que no puedes.

En cambio, supongo que necesitarías un pequeño script que ejecutarías en lugar del comando svn commit que primero actualiza la marca de tiempo y luego ejecuta el commit normal.


Sugiero cambiar el enfoque, comprometer un archivo cada vez significa mantener implícitamente el número de revisión global en ese archivo. Es posible que el usuario necesite otra palabra clave, GlobalKey , cuya inexistencia se explica aquí. En realidad, no he utilizado la versión svn mencionada. Sin embargo, puede llevarte a una solución.


Básicamente, desea el resultado del comando svnversion en un archivo.

Dichos archivos generalmente se guardan fuera del repositorio y se crean automáticamente mediante un script de compilación. Te sugiero que hagas lo mismo. Si no compila, pero solo para svn up en el lado del servidor, simplemente llame a svnversion después de svn up o cree un script de shell para realizar ambas acciones.

Si, por el contrario, tiene que guardarlo en el repositorio, llamar a svnversion en un svnversion precompromiso sería su mejor opción.


¿Podría el archivo de número de revisión cambiarse por un script que implemente su sitio web desde SVN al servidor web?

No estoy seguro sobre Windows, pero usando un script bash, haría algo como ...

$ version=$(svnversion) $ svn export . /tmp/staging/ Export complete. $ echo "Revision: ${version}" > /tmp/staging/version.txt

Entonces /tmp/staging/version.txt contendría "Revisión: 1" (o el que sea el número de revisión más alto).

Por supuesto, podría reemplazar algún identificador en un archivo, como $Rev$ (en lugar de crear version.txt como en el ejemplo anterior)


Si tiene instalado TortoiseSVN, también tiene disponible la herramienta SubWCRev. Use esa herramienta para obtener la revisión en lugar de usar mal la palabra clave $ REV $.

  1. crea un archivo de plantilla que contenga tus definiciones, tal vez algo como

    const long WC_REV = $ WCREV $;

    en un archivo llamado version.h.tmpl

  2. en cada compilación, llame a SubWCRev para crear el archivo ''real'' que puede usar en su aplicación:

    SubWCRev path / to / workingcopy path / to / version.h.tmpl path / to / version.h

Esto creará el archivo version.h desde version.h.tmpl, con el texto $ WCREV $ reemplazado con la revisión en la que se encuentra actualmente su copia de trabajo.

Los documentos para SubWCRev también podrían ser útiles .


Creo que el mejor enfoque para garantizar que haya un archivo en su aplicación web que tenga el número de revisión de SVN es no tener un archivo que haya confirmado, sino extraerlo como parte de su script de compilación.

Si usa maven, puede hacerlo con el complemento maven-buildnumber-plugin.


Creo que tal vez no entiendas cómo funciona el indicador $ Rev $. El objetivo de la bandera Rev es no tener esta revisión siempre comprometida en el repositorio de subversión. El objetivo es que en una actualización, la bandera Rev siempre será la revisión. No debería necesitar poner código en subversión que contenga la revisión. Subversion es muy bueno en el seguimiento de esa información para usted.

Lo que probablemente haya omitido es que necesita establecer una propiedad en el archivo para que la palabra clave Revisión sea procesada correctamente.

svn propset svn:keywords "Revision" file.txt

Esto garantizará que cada vez que haga una actualización, el indicador $ Rev: xxx $ se actualice con la revisión actual. No necesita preocuparse acerca de cómo está comprometido con el repositorio.