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:

  1. Cualquier cosa de ProjectA que no se haya fusionado
  2. Si el ÚLTIMO de ProjectA se ha fusionado con Ver2, obtenga el ÚLTIMO de la rama Ver2
  3. Si no hay una sucursal de ProjectA, obtenga de Ver2
  4. 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.

¿Fue útil?

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?

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