2008-08-05 15 views

Respuesta

312

La ramificación en Subversion se ve facilitada por una función de copia muy, muy ligera y eficiente.

La ramificación y el etiquetado son efectivamente los mismos. Simplemente copie una carpeta completa en el repositorio a otro lugar en el repositorio usando el comando svn copy.

Básicamente esto significa que es por convención lo que significa copiar una carpeta, ya sea una copia de seguridad, etiqueta, rama o whater. Dependiendo de cómo quiera pensar en las cosas (normalmente dependiendo de la herramienta SCM que haya utilizado en el pasado), debe configurar una estructura de carpetas dentro de su repositorio para respaldar su estilo.

estilos comunes son tener un montón de carpetas en la parte superior de su repositorio llamado tags, branches, trunk, etc - que le permite copiar sus trunk enteros (o subconjuntos) en el tags y/o branches carpetas. Si tiene más de un proyecto, es posible que desee replicar este tipo de estructura en cada proyecto:

Puede llevar un tiempo acostumbrarse al concepto, pero funciona, solo asegúrese de que usted (y su equipo) claro sobre las convenciones que vas a utilizar. También es una buena idea tener una buena convención de nomenclatura, algo que le explique por qué se realizó la sucursal/etiqueta y si aún es apropiada; considere formas de archivar ramas obsoletas.

+198

"svn copy" tiene la ventaja de que conservará el historial anterior a la bifurcación. La copia manual a otro directorio no lo hará. – WhyNotHugo

+3

También tenga en cuenta que generalmente es una mala idea etiquetar o ramificar subdirectorios de "tronco". Esto hace que sea difícil hacer un seguimiento de qué subdirectorio fue ramificado, y la mayoría de las herramientas se confundirán por estas ramas (por ejemplo, cambiar ramas significará la estructura de directorios de los cambios de WC, lo que confundirá los IDE y las herramientas de compilación). Solo siempre ramifique "tronco". – sleske

+30

* facilidad de copia muy, muy ligera y eficiente. * ¡Hah! No, copiar archivos reales es muy pesado y cómo terminas esperando horas para que los repositorios SVN lo revisen. Git, etc. son muy, muy ligeros y eficientes porque solo copian referencias cuando crean ramas. Copiar en escrito. – Will

562

Subversion hace que sea más fácil (algunos piensan demasiado fácil) crear una nueva sucursal con el comando svn copy.

$ svn copy svn+ssh://host.example.com/repos/project/trunk \ 
      svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH \ 
     -m "Creating a branch of project" 
+18

Siguiente uso 'svn switch svn + ssh: //host.example.com/repos/project/branches/NAME_OF_BRANCH .' (si desea cambiar el pago actual a la nueva sucursal) o' svn checkout svn + ssh: // host .example.com/repos/project/branches/NAME_OF_BRANCH' (si desea tener una nueva bifurcación en un directorio aparte) para comenzar a trabajar en br recién creado Anch. –

+3

*** Nota: *** en algunos casos, necesitarás usar la opción ** '--parents' ** con' svn copy'! –

+0

por alguna razón utilicé este cmd y no funcionó, pero cuando cambié el svn + ssh a solo https, funcionó. ¿Hice algo mal? ¿Cuál es el significado de svn + ssh? ¡Gracias! –

13

Lo normal sería copiarlo a svn + ssh: //host.example.com/repos/project/branches/mybranch por lo que se puede mantener varias ramas en el repositorio, pero su sintaxis es válida.

Aquí hay algunos consejos sobre how to set up your repository layout.

10

Si aún planea en la fusión de su rama, le recomiendo que mire esto:

Svnmerge.py

escucho Subversion 1.5 acumula más del registro de fusiones en, no tengo experiencia con eso. Mi proyecto está en 1.4.x y svnmerge.py es un salvavidas!

11

Suponga que desea crear una rama de un nombre de tronco (como "prueba") a continuación, utilizar:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST 
23
svn cp /trunk/ /branch/NEW_Branch 

continuación Si usted tiene algunos cambios locales en el tronco utilizar Rsync para sincronizar los cambios

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch 
+2

No es necesario utilizar 'rsync' de esta manera. 'svn cp' también copiará cualquier cambio local. –

+0

@KevinPanko No copiará los cambios no confirmados. –

+4

Lo hace, confirmado con svn, versión 1.8.5 –

4
  • Crear una nueva carpeta fuera de su proyecto actual. Puedes darle cualquier nombre. (Ejemplo: tiene un checkout para un proyecto llamado "Customization". Y tiene muchos proyectos, como "Project1", "Project2" .... Y desea crear una rama de "Project1". Por lo tanto, primero abra el " Personalización ", haga clic derecho y cree una nueva carpeta y asígnele un nombre," Project1Branch ").
  • Haga clic derecho en "Myproject1" .... TortoiseSVN -> Sucursal/Etiqueta.
  • Elija copia de trabajo.
  • Abrir el navegador .... Justo a la derecha de forma paralela en "A URL".
  • Seleccione la personalización ..... haga clic derecho y luego Agregar carpeta. y ve a través de la carpeta que has creado. Aquí está "Project1Branch". Ahora haga clic en el botón Aceptar para agregar.
  • Realiza la compra de este nuevo banch.
  • De nuevo diríjase a su proyecto qué rama desea crear. Haga clic derecho en TorotoiseSVN -> branch/tag. Luego seleccione la copia de trabajo. Y puede dar la URL como su nombre de sucursal. como {su dirección IP/svn/AAAA/Customization/Project1Branch}. Y puede establecer el nombre en la URL para que solo cree la carpeta con este nombre. Me gusta {Su dirección IP/svn/AAAA/Customization/Project1Branch/MyProject1Branch}.
  • Presione el botón OK. Ahora puede ver los registros ... su copia de trabajo se almacenará en su sucursal.
  • Ahora puedes echar un vistazo ... y permitirte disfrutar de tu trabajo. :)
9

Consejo superior para los nuevos usuarios de SVN; esto puede ayudar un poco a obtener las URL correctas rápidamente.

Ejecute svn info para mostrar información útil sobre la rama actual desprotegida.

La URL debe (si ejecuta svn en la carpeta raíz) proporcionarle la URL desde la que debe copiar.

también para cambiar a la rama recién creada, utilice el comando svn switch:

svn switch http://my.repo.url/myrepo/branches/newBranchName 
+3

También puede usar^en lugar de la raíz del repositorio – chim

20

Si eres repo está disponible a través de https, puede utilizar este comando para la rama ...

svn copy https://host.example.com/repos/project/trunk \ 
     https://host.example.com/repos/project/branches/branch-name \ 
    -m "Creating a branch of project" 
Cuestiones relacionadas