2010-03-09 17 views
11

Tengo un gran proyecto.Svn fusión troncal y ramas

Necesito hacer una rama - esta será la versión 2 del proyecto, pero también necesidad de mantener el tronco y cambiarlo en paralelo con la rama 1 como corrección de errores de la versión 1.

I Es necesario fusionar las correcciones de errores del tronco a la rama 1 al agregar nuevas características a la rama.

Al final necesito unir todos los cambios en el maletero y crear una nueva etiqueta.

así que necesito corrección de errores para la versión 1, nueva rama de la versión 2 y, por supuesto, la fusión de las correcciones de errores en la versión 2.

estoy usando SVN SVN pero la hace problemas todo el tiempo. No puedo fusionar nada sin conflictos.

¿Puede alguien darme un consejo qué hacer?

Saludos

Respuesta

0

En primer lugar, debe haber creado una "etiqueta" para su versión 1, que es una versión comercial de su producto. La versión 2 del proyecto será una continuación del tronco, no una rama de la versión 2. La única razón por la que necesitaría crear una sucursal es realizar correcciones de errores a la versión 1 (actualizada). Todo lo que haga para la nueva versión se realizará en el enlace troncal, a menos que tenga motivos para no hacerlo.

+1

He intentado esto. Pero el problema permanece. Tenemos de nuevo una rama para corregir errores y un trunk para nuevas características. Fusionar las correcciones de errores para la versión 1 en la versión 2: la conexión troncal generará muchos conflictos. El svn no puede fusionar un solo archivo sin conflictos. Resolver los conflictos a mano puede causar muchos problemas y tiempo de cintura. ¡Fusionar con reintegrar no ayuda! Me pregunto cómo otras compañías resuelven esto - corrección de errores, nueva versión y fusión de ambos? Parece que svn no es bueno para este rey del trabajo. –

6

Crear una rama con el fin de proporcionar correcciones de errores a la versión anterior se llama release branch. Debería desarrollar las correcciones de errores en el tronco (porque deben ir en todas las versiones nuevas, ¿no?). A partir de ahí, los combina de nuevo con las versiones que todavía son compatibles. Eso significa que cuando la versión 1 ya no es compatible, deja de fusionar correcciones de errores. Vea el documentation para más información.

Si una corrección de error en el tronco no se puede fusionar con la (s) rama (s), la solución es crear una 'rama backport'. Aquí puede fusionar parcialmente la corrección desde el tronco, reescribir parcialmente la misma corrección si el código es demasiado diferente. También se sugiere registrar las fusiones que normalmente se realizarían para solucionar el problema, por lo que el seguimiento de fusión le ayuda a ver si el problema se solucionó o no.

Si está arreglando /branches/1.2.x, la convención de nomenclatura que utiliza el proyecto de Subversion es crear una rama backport llamada 1.2.xr [REVNUM], donde REVNUM indica la revisión que está respaldando, o 1.2. x-issue [ISSUENUM], donde ISSUENUM indica el problema que está solucionando.

Cuando haya terminado de crear el arreglo backport, puede combinar con el relé con

svn checkout .../branches/1.2.x myproduct-1.2.x 
svn merge --reintegrate .../branches/1.2.x-r123 myproduct-1.2.x 

Después de la reintegración de la rama, la rama debe suprimirse.

0

Lo primero y más importante es que le sugiero que eche un vistazo a SVN documentation según lo sugerido por @SanderRijken y vea qué funciones y ramas de publicación son.

Pero con el sonido de su pregunta, supongo que su problema principal es uno diferente. A saber, que no hay ninguna fusión en absoluto "funcionando" (es decir, todos generan conflictos en los que no se los esperaría). Entonces, ¿podría elaborar lo que está haciendo exactamente (como publicar el comando que utiliza para la fusión)?

0

Después de fusionar los cambios del tronco en una rama, me parece que es mejor fusionar la rama en el tronco utilizando la combinación de 2 URL. Por lo que entiendo --reintegrate es simplemente una sintaxis más simple para la fusión de 2 URL que en algún momento fails (aunque la última vez que utilicé se reintegró en la versión 1.5).

svn merge url://[email protected] url://[email protected] . 

donde mergedRev es la revisión la última vez que fusionó el tronco en la bifurcación.

Si usa la instrucción de fusión simple, todos los cambios que haya fusionado desde el tronco a la rama se verán como cambiados y deberán agregarse al tronco cuando se fusionen. La primera URL en la fusión de 2 URL le dice a svn qué cambios vinieron del enlace troncal. Esto debería reducir en gran medida los conflictos durante la fusión.

En cuanto a la estructura de su repositorio puedo sugerir una entrada de blog (véase más adelante ya que sólo se me permite utilizar un enlace en mi destino) comprendido entre ariejan.net

entrada de blog: ariejan.net/2006/11/24/svn-how-to-structure-your-repository/

Cuestiones relacionadas