¿Hay alguna forma de confirmar un archivo "parcialmente" en TortoiseSVN?


Me gustaría confirmar solo una parte de un archivo usando TortoiseSVN, ¿hay alguna forma de hacerlo?

Daré un ejemplo para aclarar por qué quiero hacer eso.

Tengo un archivo con algunas definiciones que se reemplazan en el proceso de compilación, algo así:

#define SOME_PATH "[SOME_PATH]"

Esta etiqueta [SOME_PATH] se reemplaza en el proceso de compilación, pero cuando estoy codificando tengo que cambiarla para que la ruta real en mi máquina.

Así que cada vez que confirmo necesito hacer una copia de seguridad de algunas líneas, revertirlas, commit y luego restaurar la copia de seguridad, y esto es un poco molesto.

¿Hay alguna manera de decirle a TortoiseSVN que "ignore" algunos cambios en, por ejemplo, las líneas X,Y y Z?

Author: Fabio Gomes, 2008-11-24

8 answers

La respuesta más votada está desactualizada.

Desde el sitio web de TortoiseSVN: http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-commit.html

Confirmar solo partes de archivos

A veces solo desea confirmar partes de los cambios que realizó en un file. Esta situación suele ocurrir cuando se está trabajando en algo pero entonces una solución urgente necesita ser comprometida, y esa solución resulta que está en el mismo archivo en el que estás trabajando.

Haga clic derecho en el archivo y use el Menú contextual → Restaurar después de confirmar. Esto creará una copia del archivo tal como está. A continuación, puede editar el archivo, por ejemplo, en TortoiseMerge y deshacer todos los cambios que no desea cometer. Después de guardar esos cambios, puede confirmar el archivo.

Después de que se realiza la confirmación, se restaura la copia del archivo automáticamente, y usted tiene el archivo con todas sus modificaciones que no fueron devueltos.

 60
Author: Greylander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-15 23:18:56

No. Subversion funciona a nivel de archivo.

 13
Author: Corey Trager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-24 13:32:20

No.

La mejor manera de hacerlo es comprobar en algún archivo como "build_paths.h. default", luego en cada plataforma de compilación, cópielo a build_paths.h, modifícalo para que se adapte, luego dile a SVN QUE IGNORE build_paths.h. Y por último #include "buiild_paths.h" dentro de su programa.

 7
Author: Will Hartung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-24 13:33:39

En general sí! La funcionalidad se ha agregado en la última versión de torroise svn (1.8) Ver notas de la versión Desafortunadamente es un proceso manual que bien puede no ser tan adecuado para su caso de uso específico - más útil para "Estoy en medio de una nueva característica y he notado un error y quiero confirmar solo la corrección de error" situación.

Para su situación utilizo un archivo de plantilla que se utiliza en el proceso de compilación para crear el archivo real utilizado (este archivo solo se crea a partir del archivo de plantilla, nada más está presente). Tengo el archivo tempalte en svn pero el archivo acutal ignorado. Esto significa que solo necesito compilar una vez después de un nuevo checkout y luego mi copia de trabajo está bien, pero los valores de las etiquetas no están confirmados. Si necesito añadir nuevas etiquetas lo hago en el archivo tempalte y reconstruyo mi copia de trabajo.

 5
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-27 13:02:15

Versión corta: NO. Subversion es un sistema de todo o nada (al igual que todos los sistemas de control de código fuente que conozco)

Versión más larga: No, sin embargo, si usa algo como NANT para compilar, podría usar xmlpoke o similar para reescribir partes del archivo al compilar. Funciona para nosotros:) Reescribimos alrededor de 6 web.archivos de configuración y varios otros archivos de configuración de aplicaciones en la compilación (bueno, en la compilación de un paquete de implementación)....

 4
Author: Nic Wise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-24 13:33:16

La solución a su problema no es conseguir que subversion haga esto por usted, sino configurar su aplicación para que los detalles específicos del entorno (como el valor [SOME_PATH]) se almacenen 'externamente' en el código que se registra.

Si hace esto a través de un archivo separado que está marcado para ser ignorado por SVN, o si almacena esta información en una variable de entorno, depende de su lenguaje/sistema operativo de desarrollo y algunos otros factores.

Sea cual sea la solución que utilice, puede ser prudente organizar algún tipo de valor predeterminado, para permitir el caso en el que no se especifica ningún valor.

También puede valer la pena considerar si los detalles deben aplicarse en tiempo de compilación o en tiempo de ejecución; si puede organizar este último, hace que el despliegue de nuevas versiones de la aplicación sea mucho más fácil.

Un ejemplo típico se encuentra en aplicaciones web, donde se requiere una conexión de base de datos, pero la instancia de base de datos real que se utilizará es diferente entre el desarrollo y entornos de producción. En tales casos, la configuración de la base de datos se define en el servidor web (no en la aplicación, que simplemente pide al servidor web una conexión de base de datos con un nombre dado) con servidores de desarrollo y producción que tienen diferentes configuraciones. A continuación, es posible implementar la misma aplicación web en ambos servidores y hacer que cada instancia de aplicación acceda a la base de datos adecuada.

 4
Author: belugabob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-19 16:33:58

También puedes definir:

  • un gancho pre-commit que se encargará de la reversión para usted,
  • y un gancho post-commit para restaurar su archivo.

Ouch... en realidad esto no es una buena idea, de acuerdo con el Manual de SVN .

  • Todos los disparadores se ejecutan en el lado del servidor (no en el lado del cliente, como es el caso de ClearCase)
  • Subversion mantiene cachés del lado del cliente de ciertos bits de datos del repositorio, y si cambia una confirmación transacción de esta manera, esos cachés se vuelven indetectablemente obsoletos. Esta inconsistencia puede llevar a un comportamiento sorprendente e inesperado. En lugar de modificar la transacción, simplemente debe validar la transacción en el gancho pre-commit y rechazar la confirmación si no cumple con los requisitos deseados

Una posible manera sería modificar su archivo en un script post-commit, y luego confirmar ese archivo como un cambio independiente, antes de restaurarlo en otro post-commit script...

 1
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-23 09:03:21

Lo que está buscando es una característica de varios sistemas de control de versiones distribuidas como darcs.

 0
Author: yfeldblum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-22 15:04:52