2009-08-20 16 views
76

Hice un checkout desde mi maletero a un DIR local e hice muchos cambios locales allí. Ahora no quiero volver a enviarlo al tronco, pero preferiría hacer una rama de esta versión local. ¿Es eso posible?Subversion: ¿Puedo pagar, modificar y luego convertirlo en una sucursal?

¿Puedo simplemente copiar el tronco en una rama, y ​​luego cd DIR y svn switch en 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 .

(tome nota de los puntos)

+0

He encontrado demasiados conflictos por el uso de 'svn switch', así que eligieron a la caja de la nueva copia de' nueva rama-URL' después de 'svn copy'. – BornToCode

+0

sí, puedes. Yo uso tortugaSVN y puedes hacerlo en eso. – Nick

Respuesta

38

De acuerdo con su línea de comando de copia ayuda SVN puede copiar de un directorio a una URL de repositorio. Por lo que debe ser capaz de copiar su copia de trabajo a la rama, por ejemplo:

svn copy working_directory url_to_branch 
9

En mi cliente SVN: TortoiseSVN es suficiente para:

  • haga clic derecho en el directorio superior Quiero ramificarse
  • en "To URL", seleccione el directorio de la rama en su repositorio
  • en el marco de "Crear una copia en el repositorio de:" seleccionar "copia de trabajo"

hecho :)

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

1

Sí, se puede hacer esto mediante la línea de comandos SVN , así como TortoiseSVN.

tiene que especificar su workingcopy SVN como src y su nueva rama como destino del comando

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

.

En TortoiseSVN simplemente apunte en su copia de trabajo, elegir la opción "rama/etiqueta" de menú contextual y seleccione "Copia de trabajo" en la sección "Crear una copia en el repositorio de:"

en cuenta que no es un buen idea (por razones de trazabilidad) para crear etiquetas de esa manera, pero para las ramas está perfectamente bien.

50

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

Si bien también es posible crear una derivación utilizando svn copy para duplicar un directorio dentro de la copia de trabajo, no se recomienda esta técnica. ¡Puede ser bastante lento, de hecho! Copiar un directorio en el lado del cliente es una operación en 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 comando svn switch para que pueda confirmar sus cambios. Si su copia de trabajo está significativamente desactualizada con la troncal, agregue "@REV" a la URL de origen donde "REV" es la revisión de su copia de trabajo informada por svn info.

Copiar un directorio en el servidor, sin embargo, es una operación de tiempo constante, y es la forma en que la mayoría de la gente crea 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." 
+2

Gracias por esta respuesta. Esta es la mejor solución ya que mantiene el historial de revisión. – evanflash

+3

¿Eso significa que si tuviera cambios en mi copia de trabajo local, podría hacer 'svn copy ' para copiar el tronco a una nueva rama en el servidor svn, luego usar 'svn switch' en 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í, eso es correcto. y también tenga en cuenta si está desactualizado con el maletero; de ser así, agregue "@REV" a la URL de origen como lo indiqué para que, luego de cambiar a la sucursal, solo aparezcan los cambios locales como diferencias. – Lucas

Cuestiones relacionadas