Pregunta

Tengo la siguiente situación de ramas en un repositorio de perforce: hay una línea principal "Trunk" y dos ramas de lanzamiento "1.0" y "1.1". Una rama "Cliente" con cambios específicos del cliente ha sido ramificada de la sucursal 1.0. Ahora el cliente quiere pasar a la versión 1.1. ¿Cómo puedo fusionar la sucursal 1.1 en la rama del cliente? Los cambios específicos del cliente deben permanecer "en la parte superior" de 1.1.

Aquí hay un diagrama para 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 mirando es Revisión 3 en la rama del cliente.

Si elijo integrar la rama "1.1" con el "cliente" objetivo, hubiera esperado que se encuentre el antepasado común de ambos (revisión 100 en la línea principal) y todas las revisiones de allí que conducen a la punta de la rama 1.1 se fusionan (las que entre paréntesis).

En su lugar, el perfeccionar solo ofrece fusionar las revisiones 1 a 3 de la rama 1.1, lo que falla porque pierde los cambios necesarios que ocurrieron en la línea principal antes.

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

¿Fue útil?

Solución

Para facilitar las integraciones, crearía una ramas específicas trunk_to_custer y 1.1_to_customer y luego emitirá:

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

quizás un envío intermedio aquí, y luego

p4 integ -b 1.1_to_customer 
p4 resolve
p4 submit

Otros consejos

Cuando intenta integrar la revisión 3 de 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 troncales 101 y 102. Al fusionar, el perforce identificará la revisión del tronco 100 como la común Ancestro para la resolución de conflictos.

Ha sido mi experiencia que la integración que estás tratando de hacer debería funcionar. ¿Está viendo que faltan cambios en su fuente integrada (que no se puede explicar por una resolución de conflicto inadecuada), o solo está mirando la salida de p4 interchanges?

Sugeriría fuertemente tratar de fusionar los cambios del cliente en el tronco. Seguirá siendo una pesadilla de mantenimiento cuando unos meses más adelante, el cliente quiera 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 que pueda exponer el comportamiento deseado del cliente con un indicador de compilación o un archivo de configuración de compilación. Tener ambas configuraciones de compilación se ejecutan en CI para garantizar que los cambios futuros no rompan la construcción del cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top