Subversion: ¿Puedo pagar, modificar y luego convertirlo en una rama?

80

Hice un pago desde mi maletero a un DIR local e hice muchos cambios locales allí. Ahora no quiero volver a enviarlo al tronco, pero prefiero hacer una rama de esta versión local. ¿Es eso posible?

¿Puedo copiar el tronco a una rama, y luego cd DIRy svn switcha la rama?

ACTUALIZACIÓN : Gracias por las respuestas, ¡funcionó! Para resumir los pasos:

  • cd DIR
  • svn copy . new-branch-URL
  • svn switch new-branch-URL .

(nota los puntos)

Franco
fuente
sí tu puedes. Yo uso tortoiseSVN y puedes hacerlo en eso.
Nick
Encontré demasiados conflictos al usar svn switch, así que decidí retirar la copia nueva de new-branch-URLdespués svn copy.
fikr4n

Respuestas:

39

De acuerdo con la ayuda de la línea de comandos, svn copy puede copiar desde un directorio a una URL de repositorio. Por lo tanto, debería poder copiar su copia de trabajo en la rama, por ejemplo:

svn copy working_directory url_to_branch
wierob
fuente
52

El libro SVN ( http://svnbook.red-bean.com/en/1.6/svn-book.html#svn.branchmerge.using.create ) no recomienda crear una rama a partir de la copia de trabajo local.

Si bien también es posible crear una rama usando svn copypara duplicar un directorio dentro de la copia de trabajo, esta técnica no se recomienda. ¡Puede ser bastante lento, de hecho! Copiar un directorio en el lado del cliente es una operación de tiempo lineal, ya que en realidad tiene que duplicar cada archivo y subdirectorio dentro de ese directorio de copia de trabajo en el disco local.

En su lugar, cree la rama primero y luego use el svn switchcomando para que pueda confirmar sus cambios. Si su copia de trabajo está significativamente desactualizada con el tronco, agregue "@REV" a la URL de origen, donde "REV" es la revisión de su copia de trabajo informada por svn info.

Sin embargo, copiar un directorio en el servidor es una operación de tiempo constante, y es la forma en que la mayoría de las personas crean sucursales.

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."
Lucas
fuente
2
Gracias por esta respuesta. Esta es la mejor solución ya que mantiene el historial de revisiones.
evanflash
3
¿Significa eso que si tuviera cambios en mi copia de trabajo local, podría svn copy <trunk-URL> <newBranch-URL>copiar el tronco a una nueva rama en el servidor svn y luego usar svn switchen mi copia de trabajo para cambiar a la nueva rama sin perder ningún cambio? ¿O el interruptor mataría mis archivos modificados no confirmados?
Kasapo
3
@Kasapo, sí, es cierto. y también tenga en cuenta si está desactualizado con el maletero; Si es así, agregue "@REV" a la URL de origen como señalé para que después de cambiar a la sucursal, solo los cambios locales se muestren como diferencias.
Lucas
Permítanme agregar un enlace muy útil que explica con más detalle la solución de Lucas: svnbook.red-bean.com/en/1.6/svn.branchmerge.switchwc.html (mire el cuadro informativo en la parte inferior). De hecho, esta es la solución más limpia y conveniente para crear una rama a partir de modificaciones locales.
Spiros
9

En mi cliente SVN: TortoiseSVN es suficiente para:

  • haga clic derecho en el directorio superior que quiero bifurcar
  • en "A URL" seleccione el directorio de la sucursal en su repositorio
  • en el marco "Crear copia en el repositorio desde:" seleccione "Copia de trabajo"

hecho :)

Es como copiar la versión local a la URL del repositorio especificada.

twk
fuente
1

Sí, puede hacer esto mediante la línea de comandos SVN y tortoiseSVN .

Debe especificar su copia de trabajo SVN como src y su nueva rama como destino del

svn copy <file/path/to/working/copy> <URL/TO/REPOSITORY/BRANCH>

mando.

En TortoiseSVN, simplemente apunte a su copia de trabajo, elija "Rama / etiqueta" del menú contextual y elija "Copia de trabajo" en la sección "Crear copia en el repositorio desde:"

Tenga en cuenta que no es una buena idea (por razones de trazabilidad) crear etiquetas de esa manera, pero para las sucursales está perfectamente bien.

Peter Parker
fuente