¿Cuál es la mejor manera de hacer que una de las ramas de un repositorio de subversión sea el nuevo tronco?
Ha habido una gran reescritura para todo el sistema: las cosas se han movido, reescrito, reemplazado, eliminado, renombrado, etc. El código reescrito ha sido probado y está listo para reemplazar el viejo baúl.
Básicamente, la antigua línea principal (Trunk 5) está etiquetada y terminará aquí. La rama reescrita (Rama 6) se convertirá en la nueva línea principal (Troncal 7):
Tronco (1) -> Tronco (2) -> Tronco (5) -> × + -> nuevo Tronco (7) \ \ | tenedor de fusión? \ \ | + -> Rama (3) -> Rama (4) -> Rama (6) - +
Todos los cambios en curso desde el viejo 'Tronco' ya están incorporados en la 'Rama reescrita'
¿Cómo puedo hacer esto?
fuente
Estoy de acuerdo con usar el comando svn move para lograr este objetivo.
Sé que otros aquí piensan que es inusual, pero me gusta hacerlo de esta manera. Cuando tengo una rama de características y estoy listo para fusionarla con una troncal que también se ha modificado significativamente, la fusionaré con una nueva rama, generalmente llamada
<FeatureBranchName>-Merged
. Luego resuelvo conflictos y pruebo el código combinado. Una vez que está completo, muevo el tronco a la carpeta de etiquetas para no perder nada. Finalmente me muevo<FeatureBranchName>-Merged
al baúl.Además, prefiero evitar la copia de trabajo al hacer los movimientos, aquí hay ejemplos de los comandos:
Nota: yo uso 1.5
fuente
Estaba viendo este problema recientemente, y la solución con la que estaba muy contento fue realizar
svn merge --ignore-ancestry trunk-url branch-url
en la copia de trabajo de mi baúl.
Esto no intenta aplicar los cambios de manera histórica (manteniendo los cambios en el tronco). Simplemente "aplica la diferencia" entre el tronco y la rama. Esto no creará ningún conflicto para sus usuarios en los archivos que no fueron modificados. Sin embargo, perderá su información histórica de la rama, pero eso sucede cuando realiza una fusión de todos modos.
fuente
Le recomendamos que realice estos cambios a través de la herramienta de navegador de repositorio.
Intentar grandes operaciones de borrar + mover a través de la copia de trabajo es una excelente manera de eliminar la copia de trabajo. Si se ve obligado a usar la copia de trabajo, realice confirmaciones incrementales después de cada operación de eliminación o movimiento y ACTUALICE su copia de trabajo después de cada confirmación.
fuente
Si desea hacer que la rama sea la nueva troncal (es decir), deshacerse de todos los cambios en la troncal que se hicieron desde que se creó la rama, puede 1. Crear una rama del tronco (para fines de respaldo) 2. "revertir los cambios "en el enlace troncal (seleccione todas las revisiones después de crear el ramal 3. Combine el ramal nuevamente con el tronco.
La historia debería permanecer así.
Saludos, Roger
fuente
Las soluciones @Aaron Digulla y @kementeus son viables. Para los repositorios de Subversion 1.4, las operaciones de copiar / mover pueden dificultar la migración futura a una estructura de repositorio diferente o dividir los repositorios.
Creo que las mejoras de 1.5 incluyen una mejor resolución del historial de movimiento / copia, por lo que probablemente no sería un problema para un repositorio de 1.5.
Para un repositorio 1.4, recomendaría usar
svnadmin dump
ysvndumpfilter
realizar el movimiento del tronco existente en otro lugar, luego mover la rama al tronco con el mismo mecanismo. Cargue los dos archivos de volcado en un repositorio de prueba, verifique y luego muévalo a producción.Por supuesto, haga una copia de seguridad de su repositorio existente antes de comenzar.
Esto preserva el historial sin registrar el movimiento / copia explícitamente y facilita la futura reorganización, preservando el historial.
Editar: según lo solicitado, la documentación del comportamiento 1.4, del libro 1.4 Red-Bean, Filtering Repository History
Esto se aplica a las migraciones / reorganizaciones que utilizan
svndumpfilter
. Hay momentos en los que un poco de trabajo adicional ahora puede ahorrar mucho trabajo adicional más adelante, y al mantener un uso fácilsvndumpfilter
disponible para futuras migraciones / reorganizaciones, se mitiga el riesgo a un costo relativamente bajo.fuente
Si bien las respuestas anteriores funcionarán, no son las mejores prácticas. El último servidor svn y el cliente se fusionan para usted. Entonces, svn sabe qué revisiones ha fusionado en una rama y de dónde. Esto ayuda mucho al mantener una rama actualizada y luego fusionarla nuevamente en el tronco.
Sin embargo, no importa qué versión de Subversion esté usando, existe un método de práctica recomendada para que los cambios de una rama vuelvan al tronco. Se describe en el manual de Subversion: Control de versiones con Subversion, Capítulo 4. Ramificación y fusión, Mantener una rama en sincronización .
fuente
Es una configuración realmente extraña / inusual en SVN, aunque creo que está lejos de ser una "buena práctica", supongo que podrías hacer algo como:
Buena suerte
fuente