2010-10-12 7 views
5

Tengo la siguiente situación de sucursales en un repositorio de Perforce: Hay una línea principal "troncal" y dos ramas de publicación "1.0" y "1.1". Un "cliente" de sucursal con cambios específicos del cliente se ha ramificado fuera de la sucursal 1.0. Ahora el cliente quiere pasar a la versión 1.1. ¿Cómo puedo fusionar la rama 1.1 en la rama de clientes? Los cambios específicos del cliente deben permanecer "en la parte superior" de 1.1.Perforce: ¿Cómo se integra en varias ramas?

Aquí es un diagrama de un archivo afectado:

1.1      -(1)---(2)---(3) 
         /   \  \ 
        /   \  \ 
trunk 100--(101)-(102)--103---104---105---106---107 
      \ 
      \ 
1.0   ---1-----2--... 
       \ 
        \ 
customer   ---1-----2----*3* 

La versión actual del archivo que estoy viendo es la revisión 3 en la rama del cliente.

Si elijo integrar la rama "1.1" con el objetivo "cliente", esperaba encontrar el ancestro común de ambos (revisión 100 en la línea principal) y todas las revisiones desde allí hasta la punta de la rama 1.1 son fusionados (los que están entre paréntesis).

En cambio, Perforce solo ofrece fusionar las revisiones 1 a 3 de la rama 1.1, que falla porque se pierden los cambios necesarios que ocurrieron antes en la línea principal.

¿Cómo puedo convencer a Perforce de que haga esto sin tener que mirar cada archivo manualmente y seleccionar las revisiones para fusionar? Tal vez la estrategia de ramificación no es adecuada? ¿Que más deberia hacer?

Respuesta

0

Para hacer integraciones fácil, me gustaría crear un ramas específicas trunk_to_custer y 1.1_to_customer y ejecuta:

cd customer-workspace 
p4 integ -b trunk_to_customer @change-number-at-which-1.1-was-branched 
p4 resolve 

tal vez una en el medio presentar aquí, y luego

p4 integ -b 1.1_to_customer 
p4 resolve 
p4 submit 
+0

Si intento "p4 integ -b 1.1_to_customer" aparece "no se puede integrar desde ... sin -i bandera" para cada archivo que tenga cambios en la rama del cliente. Si agrego "-i", la fusión falla porque solo las revisiones en la rama 1.1 están integradas y no las de la troncal. – hfs

+0

Perforce no sabe que los cambios 101 y los cambios 102 son esenciales para lo que sucedió en la rama 1.1. Por lo tanto, primero debe integrar el tronco hasta 102 en el cliente antes de integrar 1.1. –

+0

Sí, eso es lo que hice al final: tenía dos etiquetas en la línea principal que marcaba las bases de las ramas de 1.0 y 1.1. Primero fusioné el "tronco" entre estas etiquetas, resolví todo, luego fusioné 1.1 sobre eso y resolví nuevamente.Eso funcionó. – hfs

2

Al intentar para integrar la revisión 3 desde su rama 1.1, Perforce solo le dirá que está integrando cambios en esa rama en particular, pero la revisión 1 ya contiene revisiones de troncales 101 y 102. Al fusionarse, Perforce identificará la revisión de troncales 100 como el antecesor común para confl resolución tic.

Según mi experiencia, la integración que estás tratando de hacer debería ser Just Work. ¿Ve que faltan cambios en su fuente integrada (que no puede explicarse por una resolución de conflicto incorrecta) o simplemente está mirando el resultado de p4 interchanges?

2

Recomiendo tratar de combinar los cambios del cliente en el enlace troncal. Continuará siendo una pesadilla de mantenimiento cuando, unos meses después, el cliente desea actualizar a 2.0 + sus cambios personalizados.

Si no desea que los cambios del cliente se reflejen en su proyecto principal, tómese el tiempo para reestructurar el código para poder exponer el comportamiento deseado del cliente con un indicador de compilación o un archivo de configuración de compilación. Haga que ambas configuraciones de compilación se ejecuten en CI para garantizar que los cambios futuros no rompan la compilación del cliente.

Cuestiones relacionadas