svn - tag - merge branches subversion
svn: reemplazar tronco con rama (8)
Es una configuración realmente extraña / inusual en SVN, incluso creo que está lejos de ser una "buena práctica" en absoluto, de todos modos, supongo que podrías hacer algo como:
- Verifica todo el árbol de fuentes (svn co therootsourcetree)
- Retire el tronco (svn rm trunk)
- Copie la rama al tronco (svn cp branches / thebranch / trunk)
- Eliminar la rama (svn rm branches / thebranch)
- Confirmar los cambios
Buena suerte
¿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 reescritura importante para todo el sistema: las cosas se han movido, reescrito, reemplazado, eliminado, renombrado, etc. El código reescrito se ha probado y está listo para reemplazar el viejo baúl.
Básicamente, la antigua línea principal (Troncal 5) está etiquetada y terminará aquí. La rama reescrita (Rama 6) se convertirá en la nueva línea principal (Troncal 7):
Trunk(1) --> Trunk(2) --> Trunk(5) --> × +--> new Trunk(7) / / | fork merge ??? / / | +--> Branch(3) --> Branch(4) --> Branch(6) --+
Todos los cambios en curso del antiguo ''Tronco'' ya están incorporados en la ''Rama reescrita''
¿Cómo puedo hacer esto?
Estoy de acuerdo con el uso del 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é a una nueva rama, normalmente denominada <FeatureBranchName>-Merged
. Luego resuelvo conflictos y pruebo el código fusionado. Una vez que está completo, muevo el tronco hasta la carpeta de etiquetas para no perder nada. Por último, muevo mi <FeatureBranchName>-Merged
al tronco.
Además, prefiero evitar la copia de trabajo al hacer los movimientos, aquí hay ejemplos de los comandos:
svn move https://SVNUrl/svn/Repo/trunk https://SVNUrl/svn/Repo/tags/AnyName
svn move https://SVNUrl/svn/Repo/branches/BranchName-Merged https://SVNUrl/svn/Repo/trunk
Nota: uso 1.5
Hace poco estaba viendo este problema, 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 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 sucursal, pero eso sucederá cuando realice una combinación de todos modos.
Las soluciones @Aaron Digulla y @kementeus son viables. Para los repositorios de Subversion 1.4, las operaciones de copiar / mover pueden dificultar la futura migración a una estructura de repositorio diferente o la división de repositorios.
Creo que las mejoras de 1.5 incluyen una mejor resolución del historial de movimientos / copias, por lo que probablemente no sea un problema para un repositorio de 1.5.
Para un repositorio de 1.4, recomiendo usar svnadmin dump
y svndumpfilter
para 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 hace que la reorganización futura, preservando el historial, sea más fácil.
Editar: según lo solicitado, la documentación del comportamiento 1.4, del libro 1.4 Red-Bean, Historial de repositorio de filtrado
Además, las rutas copiadas pueden darte algunos problemas. Subversion admite operaciones de copia en el repositorio, donde se crea una nueva ruta copiando una ruta ya existente. Es posible que en algún momento de la vida útil de su repositorio, haya copiado un archivo o directorio desde una ubicación que
svndumpfilter
excluye, a una ubicación que esté incluyendo. Para que los datos de volcado sean autosuficientes,svndumpfilter
necesita mostrar la adición de la nueva ruta, incluidos los contenidos de los archivos creados por la copia, y no representar esa adición como una copia de una fuente que no existirá. en su flujo de datos de volcado filtrado. Pero debido a que el formato de volcado del depósito de Subversion solo muestra lo que se modificó en cada revisión, es posible que el contenido del origen de la copia no esté disponible. Si sospecha que tiene copias de este tipo en su repositorio, puede reconsiderar su conjunto de rutas incluidas / excluidas, quizás incluyendo también las rutas que sirvieron como fuentes de sus molestas operaciones de copia.
Esto se aplica a migraciones / reorganizaciones usando svndumpfilter
. Hay momentos en que un poco de trabajo extra ahora puede ahorrar mucho trabajo adicional más adelante, y al mantener un uso fácil de svndumpfilter
disponible para futuras migraciones / reorganizaciones mitiga el riesgo a un costo relativamente bajo.
Recomendamos que realice estos cambios a través de la herramienta de navegador de repositorios.
Intentar grandes operaciones de eliminar + mover a través de la copia de trabajo es una gran manera de matar la copia de trabajo. Si se ve obligado a utilizar 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.
Si bien las respuestas anteriores funcionarán, no son la mejor práctica. El último servidor svn y la pista del cliente se fusiona para usted. Entonces svn sabe qué revisiones ha fusionado en una sucursal y desde dónde. Esto ayuda mucho al mantener una rama actualizada y luego fusionarla de nuevo en el tronco.
Sin embargo, independientemente de la versión de Subversion que esté utilizando, existe un método de mejores prácticas para hacer que los cambios en una rama vuelvan a ser troncales. Se describe en el manual de Subversion: Control de versiones con Subversion, Capítulo 4. Ramificación y fusión, manteniendo una rama en sincronización .
Si desea hacer que la bifurcación del nuevo enlace troncal (es decir) se deshaga de todos los cambios en el enlace que se realizaron desde la creación de la bifurcación, podría: 1. Crear una bifurcación del enlace troncal (para fines de copia de seguridad) 2. "revertir cambios "en el maletero (seleccione todas las revisiones después de que se creó la rama 3. Vuelva a fusionar la rama al tronco.
La historia debería permanecer de esta manera.
Saludos, Roger
Use svn move para mover el contenido del viejo baúl a otra parte y luego cambie el nombre de la rama al baúl.
Tenga en cuenta que copiar y mover en svn funciona como operaciones de archivos. Puedes usarlos para mover / copiar cosas en tu repositorio y estos cambios también son versionados. Piense en "mover" como "copiar + eliminar".
[EDIT] nilbus me acaba de notificar que obtendrás conflictos de combinación cuando uses svn move
.
Sigo pensando que este es el enfoque correcto. Causará conflictos, pero si se fusiona con cuidado, es probable que no pierda ningún dato. Si eso te molesta, usa un VCS mejor como Mercurial o Git .