svn - tag - ¿Cómo creo una etiqueta de una revisión anterior en Subversion cuando uso Assembla?
merge branches subversion (2)
Uso Assembla para gestionar mi repositorio Subversion. He iniciado algunas revisiones importantes de mi base de código y quiero crear una etiqueta de mi revisión de producción más reciente (que olvidé hacer cuando puse mi rev en producción hace unas semanas).
Actualmente estoy en la revisión 588, y quiero crear una etiqueta de la revisión 577. ¿Cómo hago para hacer esto desde la línea de comandos utilizando Subversion dentro de Assembla?
Supongamos que la URL de SVN de Assembla es: https://subversion.assembla.com/svn/my_assembla_svn_directory/
Directamente de la documentación de SVN :
Si desea crear una instantánea de / calc / trunk exactamente como se ve en la revisión de HEAD, haga una copia de la misma:
$ svn copy http://svn.example.com/repos/calc/trunk / http://svn.example.com/repos/calc/tags/release-1.0 / -m "Tagging the 1.0 release of the ''calc'' project." Committed revision 902.
Este ejemplo asume que ya existe un directorio / calc / tags. (Si no lo hace, puede crearlo utilizando svn mkdir). Una vez que se completa la copia, el nuevo directorio release-1.0 es para siempre una instantánea de cómo se veía el directorio / trunk en la revisión HEAD en el momento en que realizó la copia. Por supuesto, es posible que desee ser más preciso sobre qué revisión exactamente copia, en caso de que alguien más haya realizado cambios en el proyecto cuando no estaba mirando. Entonces, si sabe que la revisión 901 de / calc / trunk es exactamente la instantánea que desea, puede especificarla pasando -r 901 al comando svn copy .
(énfasis mío)
Siempre puede usar el parámetro -r
para referirse a una revisión específica. Al hacerlo, también puede usar la @rev
revisión @rev
para asegurarse de que se está refiriendo al diseño de la revisión de Subversion en una revisión particular. Lo siguiente creará una etiqueta desde el tronco en la revisión 577 y llamará a esta etiqueta REV-1.2
:
$ svn cp -r 577 https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk
https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REV-1.2
Si no tiene directorios de trunk
, branches
y tags
, deberá mover su trabajo para crear algunos:
$ # Move the current directory to the "trunk"
$ svn cp https://subversion.assembla.com/svn/my_assembla_svn_directory /
https://subversion.assembla.com/svn/my_assembla_svn_directory/trunk
$ # Make a corresponding tags and branches directories too
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/branches
$ svn mkdir https://subversion.assembla.com/svn/my_assembla_svn_directory/tags
$ # Now, we can delete the old location. Let your developers know this,
$ # so they''re not surprised by this and will be able to do a "svn relocate"
$ svn delete https://subversion.assembla.com/svn/my_assembla_svn_directory/
$ # Whoops. I should have done the tagging when I had a chance.
$ #Oh well, we''ll use the `@rev` pinning:
$ svn -r557 cp https://subversion.assembla.com/svn/my_assembla_svn_directory@557 /
https://subversion.assembla.com/svn/my_assembla_svn_directory/tags/REL-1.2
Subversion no implementa etiquetado y bifurcación excepto como una copia. Esto no es inusual. Perforce implementa la ramificación de la misma manera. De hecho, una vez que te acostumbras, funciona muy bien:
- Es fácil ver las ramas y etiquetas válidas (simplemente haga un
svn ls
en el directorio correcto - El historial completo de etiquetas y ramas es fácil de ver. Puedes ver quién hizo el cambio, cuándo, por qué, etc.
- Se muestra el historial completo de la etiqueta o rama. Si alguien cambia una etiqueta o rama, verás quién lo hizo muy claramente.
- Desalienta el tipo de bifurcación con helter-skelter que se ve en muchos otros sistemas de control de versiones cuando los desarrolladores seleccionan y escogen entre varias bifurcaciones y el troncal qué ramificar o etiquetar. Eso hace que el seguimiento de la historia sea muy difícil de hacer. El esquema de Subversion lo alienta a pensar que las ramas y etiquetas afectan a todos los archivos en un proyecto.