¿Archivar en TortoiseSVN?


He pasado de TFS a SVN (TortoiseSVN) con mi empresa actual. Realmente echo de menos la función "Shelve" de TFS. He leído varios artículos sobre cómo" Dejar de lado " con SVN, pero no he leído nada que dé una experiencia muy simple para "dejar de lado" el trabajo.

Idealmente, me gustaría añadir elementos adicionales al menú contextual de TortoiseSVN - "Shelve" & "Unshelve". "Shelve" eliminaría el actual shelve-set, y subiría el directorio de trabajo bajo una ruta adecuada definida por las opciones del usuario. "Retomar cambios aplazados" sería fusionar el conjunto con la copia de trabajo.

¿Existe algo así? ¿Puede alguien sugerir alguna forma de" hackear " esta función en la interfaz gráfica de usuario?

Nota: El siguiente enlace realmente no logra la experiencia de usuario que estaba buscando:

Archivando Subversion

Una de las mejores cosas de TFS Shelve es lo fácil que es de usar...

Author: nmichaels, 2008-08-12

6 answers

No creo que SVN tenga esta característica integrada en el producto servidor. Tampoco creo que nada como esto emulado en ningún cliente que he utilizado, incluyendo TortoiseSVN.

Para evitar este problema, he recurrido a usar un DVCS como Git o Mercurial, para permitirme branch/merge/shelve localmente antes de enviar el contenido de nuevo a SVN. Podría decirse que es un poco complicado, pero funciona muy bien.

 30
Author: OJ.,
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
2018-07-02 08:47:50

Si entiende cómo funcionan las ramas SVN, emular Shelve en SVN es una obviedad:

  1. Crear una rama en el repositorio (en el servidor)
  2. Cambie su copia local a ella
  3. Confirma tus cambios en la nueva rama
  4. Cambie su copia local al tronco

Cuando esté listo para volver a sus cambios archivados ("unshelve"), simplemente combine la rama shelf de nuevo a su copia local.

Si no conoce SVN de línea de comandos ni Tortoise SVN lo suficientemente bien como para hacer lo anterior, aquí hay una instrucción paso a paso súper detallada sobre cómo hacerlo en Tortoise SVN:

  1. Haga "SVN Update" para actualizar su copia de trabajo a la última versión del tronco. De esta manera, las únicas diferencias entre su copia local y el tronco son sus cambios.
  2. Desde el menú contextual seleccione "Rama / Etiqueta"
  3. La opción"HEAD version in the repository" está seleccionada por defecto. Quédatelo.
  4. Cambie el "A Url" para especificar el nombre de la rama, p.ej. http://server/repository/project1/branches/shelf1
  5. Marque la casilla" Cambiar copia de trabajo a nueva rama/etiqueta "
  6. Haga clic en Aceptar para crear la rama y cambiar a ella
  7. Do "SVN Commit..."y confirme sus cambios en la rama recién creada
  8. En el menú contextual seleccione " Cambiar..."
  9. Cambie el "A URL" a la URL troncal, por ejemplo, http://server/repository/project1/trunk
  10. Haga clic en Aceptar para volver al tronco

Consulte este enlace para obtener más detalles y el equivalente en línea de comandos de lo anterior:
Estanterías en Subversion

 15
Author: zvolkov,
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-03-23 23:05:03

Otra opción es usar la función 'Create patch' en TortoiseSVN para crear un archivo de parche y revertir los cambios. El archivo de parche se puede volver a aplicar más tarde para volver a donde estaba.

Aún puede terminar con algunas fusiones adhesivas si tiene que actualizar la revisión de la copia de trabajo.

 9
Author: Paul Ruane,
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
2012-02-14 13:26:54

La estantería en SVN está comenzando a implementarse con la versión 1.10, consulte Notas de la versión

 7
Author: ccalboni,
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
2018-04-03 11:52:21
 4
Author: TWT,
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
2018-04-24 08:31:27

Puedes usar un DVCS pero en cierto modo esto es un kludge. 'Shelving' en un DVCS almacena sus cambios solo localmente. Es útil solo si desea revisar su trabajo para revertirlo si lo rompe con más trabajo, pero preferiblemente desea guardar su trabajo en el servidor.

Una forma de hacer esto en SVN sin un comando de shelve explícito es cambiar su copia de trabajo a una ubicación svn diferente y confirmar allí en lugar de en su repositorio principal. Esto es efectivamente como la creación de un temporal rama y trabajando en eso durante la duración de su trabajo. No creo que tengas que fusionar ya que SVN lo hará por ti cuando cambies, ya que tus modificaciones locales se mantendrán.

Desafortunadamente, no puede cambiar a una ubicación inexistente, por lo que la primera vez que haga esto, tendrá que crear la 'rama' para archivarla. Supongo que todo podría ser automatizado.

 2
Author: gbjbaanb,
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
2011-05-26 12:02:12