Clearcase Config Spec con sucursal privada
-
04-07-2019 - |
Pregunta
Tengo una estructura de ramificación algo complicada en el trabajo (al menos para mí). Es algo como esto:
Main | 1 | 2 | \ 3 \ Ver2 | 1 | \ 2 \ | ProjectA 3 | 1
Hay 2 ramas fuera de la principal. " Ver2 " que tiene los cambios de todos para la próxima versión, y " Proyecto A " que es mi trabajo.
Mi pregunta es: ¿Existe una manera de crear una especificación de configuración que sepa qué se ha fusionado para obtener:
- Cualquier cosa de ProjectA que no se haya fusionado
- Si el ÚLTIMO de ProjectA se ha fusionado con Ver2, obtenga el ÚLTIMO de la rama Ver2
- Si no hay una sucursal de ProjectA, obtenga de Ver2
- Si no hay Ver2, obtenga de MAIN
Por ejemplo, en el caso anterior, si fusioné la versión 1 de ProjectA a la versión 2 en la rama Ver2, me gustaría ver la versión 3 en la versión 2. Sin embargo, si aún no he fusionado esos archivos, me gustaría tener la versión 1 de ProjectA en mi opinión.
Solución
Debe recordar por qué define una rama :
Para aislar un esfuerzo de desarrollo.
Para administrar mejor las especificaciones de configuración complejas, debe saber con precisión qué rol juegan la rama 'principal', la rama v2 y la rama del proyecto A.
V2 y el proyecto A, por ejemplo, deberían estar allí por dos razones diferentes.
Si el Proyecto A está allí para desarrollar la versión actual del proyecto, deben ocurrir las combinaciones a la rama V2 para permitir la actualización de algunos de los desarrollos actuales a la rama V2.
Por ese razonamiento, no debería querer ver " ambos " en la misma vista: representan dos conjuntos de archivos diferentes, V2 podría incluir refactorizaciones grandes con API muy diferentes.
Sin embargo, si insiste en dicha configuración, puede usar la capacidad de mover un " MERGE_FROM_PA " etiqueta: cada vez que fusiona algunos archivos del proyecto A a la rama V2, configura de nuevo el " MERGE_FROM_PA " etiqueta para cada archivo / directorio fusionado, moviendo esa etiqueta de las versiones anteriores de V2 a sus últimas.
La especificación de configuración podría ser:
element * MERGE_FROM_PA
element * .../ProjectA/LATEST
element * .../V2/LATEST
element * /main/LATEST
Pero, de nuevo, eso no tendría mucho sentido.
Debe definir los diferentes esfuerzos de desarrollo que desea modelar, y luego definir un flujo de trabajo coherente , permitiendo su configuración especifique centrarse solo en uno de esos entornos.
Otros consejos
No creo que puedas hacerlo así. Lo que puedes obtener, sin embargo, es lo último en ProjectA; cualquier cosa en Ver2 que no haya sido cambiada en ProjectA; y cualquier cosa en MAIN que no haya sido cambiada en Ver2 o ProjectA. El resto del truco es garantizar que todo lo necesario se haya fusionado desde Ver2 o PRINCIPAL. Para eso, puede usar una vista de referencia con una especificación de configuración para Ver2 (no necesita una para MAIN a menos que Ver2 no se mantenga actualizada), y luego, en la vista ProyectoA, haga lo siguiente:
cleartool findmerge . -fta view-tag-for-ver2 -merge
El -fta
significa " desde la etiqueta " ;. Hay innumerables opciones adicionales, por supuesto.
Esto garantiza que ProjectA esté completamente actualizado con respecto a Ver2.
¿Por qué no? No usar una rama si se ha fusionado en alguna parte tiene sentido para mí.
Aquí está la especificación de configuración:
element * {version(.../ProjectA/LATEST)&&!hltype(Merge,->)}
element * {version(.../Ver2/LATEST)&&!hltype(Merge,->)}
element * /main/LATEST
¿Qué hace que este flujo de trabajo sea incoherente, siempre que lo etiquetes todo antes de una compilación?