¿Cómo creo una rama?

Respuestas:

349

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

La ramificación y el etiquetado son efectivamente lo mismo. Simplemente copie una carpeta completa en el repositorio a otro lugar del repositorio usando el svn copycomando.

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

Los estilos comunes son tener un montón de carpetas en la parte superior de su repositorio llamada tags, branches, trunk, etc - que le permite copiar sus enteros trunk(o subconjuntos) en los tagsy / o branchescarpetas. 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) tengan claras las convenciones que va a utilizar. También es una buena idea tener una buena convención de nomenclatura, algo que le diga por qué se hizo la rama / etiqueta y si aún es apropiada, considere formas de archivar ramas que son obsoletas.

Ronnie
fuente
211
"svn copy" tiene la ventaja de que conservará el historial previo a la ramificación. Copiar manualmente a otro directorio no lo hará.
WhyNotHugo
55
También tenga en cuenta que generalmente es una mala idea etiquetar o ramificar subdirectorios de "troncal". Esto hace que sea difícil hacer un seguimiento de qué subdirectorio se ramificó, y la mayoría de las herramientas se confundirán con estas ramas (por ejemplo, cambiar de rama significará la estructura de directorios de los cambios de WC, lo que confundirá los IDE y las herramientas de compilación). Solo siempre bifurca el "tronco".
sleske
1
@Will En realidad svn cpusa copias baratas, no copia los archivos reales durante la ramificación. Ver svnbook.red-bean.com/en/1.1/ch04s02.html
Walty Yeung
607

Cree una nueva rama utilizando el svn copycomando de la siguiente manera:

$ 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"
chispas
fuente
24
Siguiente uso svn switch svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH .(si desea cambiar el pago actual a una nueva sucursal) o svn checkout svn+ssh://host.example.com/repos/project/branches/NAME_OF_BRANCH(si desea tener una nueva sucursal en el directorio separado) para comenzar a trabajar en la sucursal recién creada.
Jakub Narębski
3
Nota: en algunos casos necesitaría usar la--parentsopción consvn copy!
Jakub Narębski
1
por alguna razón usé 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!
Aviel Gross
primero debe crear un nuevo directorio en su sucursal -> svn mkdir host.example.com/repos/project/branches/NAME_OF_BRANCH -m "crear el directorio de sucursales para contener todas las sucursales"
Silvio Troia
Si omito la -mopción, dice como svn: E155010: Path '/home/constantine/someDirectory/svn+ssh:https:/myhost.com/svn/dir1/dir2/trunk/dir3/dir4/dir5' does not exist. Con -meso dice svn: E205009: Local, non-commit operations do not take a log message or revision properties. (Reemplacé las direcciones, pero existen, excepto, ofc, el nuevo directorio de sucursal y toda la ruta + url que SVN por alguna razón se fusionó en el error) .
Hola Angel
33

Si su repositorio está disponible a través de https, puede usar este comando para bifurcar ...

svn copy https://host.example.com/repos/project/trunk \
       https://host.example.com/repos/project/branches/branch-name \
  -m "Creating a branch of project"
Dave
fuente
26
svn cp /trunk/ /branch/NEW_Branch

Si tiene algunos cambios locales en el tronco, úselo Rsyncpara sincronizar los cambios.

rsync -r -v -p --exclude ".svn" /trunk/ /branch/NEW_Branch
Parag Bafna
fuente
2
No hay ningún requisito para usar rsyncde esta manera. svn cptambién copiará cualquier cambio local.
Kevin Panko
@KevinPanko No copiará cambios no confirmados.
Parag Bafna
44
Lo hace, confirmado con svn, versión 1.8.5
Kevin Panko
Me pregunto sobre esto. Esta parece ser la opción más fácil, y AFAI recuerda, esto es lo que hice cuando trabajaba con SVN hace 3 años. ¿Pero cuál es la diferencia entre esto y los que trabajan directamente con las URL del servidor?
oligofren
@KevinPanko ¿Sabe si también copia archivos recién creados?
John Hamilton
16

Suponga que desea crear una rama a partir de un nombre de troncal (como "PRUEBA") y luego use:

svn cp -m "CREATE BRANCH TEST" $svn_url/trunk $svn_url/branches/TEST
Chamly Idunil
fuente
14

Normalmente lo copiaría a svn + ssh: //host.example.com/repos/project/branches/mybranch para que pueda mantener varias ramas en el repositorio, pero su sintaxis es válida.

Aquí hay algunos consejos sobre cómo configurar el diseño de su repositorio .

pix0r
fuente
13

Sugerencia para nuevos usuarios de SVN; Esto puede ayudar un poco a obtener rápidamente las URL correctas.

Ejecutar svn infopara mostrar información útil sobre la rama actual desprotegida.

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

También para cambiar a la rama recién creada, use el svn switchcomando:

svn switch http://my.repo.url/myrepo/branches/newBranchName
chim
fuente
3
También puede usar ^ en lugar de la raíz del repositorio
chim
11

Si incluso planea fusionar su sucursal, le recomiendo que mire esto:

Svnmerge.py

Escuché que Subversion 1.5 crea más seguimiento de fusión, no tengo experiencia con eso. ¡Mi proyecto está en 1.4.xy svnmerge.py es un salvavidas!

basszero
fuente
6
  • Crea una nueva carpeta fuera de tu proyecto actual. Puedes darle cualquier nombre. (Ejemplo: tiene un pago para un proyecto llamado "Personalización". Y tiene muchos proyectos, como "Proyecto1", "Proyecto2" .... Y desea crear una rama de "Proyecto1". 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 -> Branch / Tag.
  • Elija una copia de trabajo.
  • Abra el navegador .... Justo a la derecha del paralelo en "To URL".
  • Seleccione 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.
  • Echa un vistazo a este nuevo banco.
  • Vuelva a ir a su proyecto, qué rama desea crear. Haga clic derecho en TorotoiseSVN -> rama / etiqueta. Luego seleccione 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 cree la carpeta solo con este nombre. Como {Su dirección IP / svn / AAAA / Personalización / Project1Branch / MyProject1Branch}.
  • Presione el botón OK. Ahora puede ver los registros en ... su copia de trabajo se almacenará en su sucursal.
  • Ahora puedes echar un vistazo ... y dejarte disfrutar de tu trabajo. :)
Sonu Gupta
fuente
-1

A continuación se detallan los pasos para crear una rama desde el tronco utilizando TortoiseSVN en la máquina Windows. Obviamente, esto necesita que se instale el cliente TortoiseSVN.

  1. Haga clic derecho en el tronco actualizado desde la máquina de Windows local
  2. Seleccione TortoiseSVN
  3. Haga clic en rama / etiqueta
  4. Seleccione la ruta A en el repositorio SVN. Tenga en cuenta que la URL de destino se actualiza de acuerdo con la ruta y el nombre de la rama dados
  5. No cree carpetas dentro de ramas en el navegador de repositorios
  6. Añadir ramas de ruta. Por ejemplo, ramas /
  7. Agregue un mensaje de registro significativo para su referencia
  8. Haga clic en Aceptar, esto crea una nueva carpeta en el sistema local
  9. Verifique la rama creada en una nueva carpeta
Prashanth
fuente