Pregunta

Versión corta:

Después de ramificación en P4, ¿cómo puedo encontrar la lista de cambios "fuente" de la rama?

Versión larga:

Vamos a decir que tienen una rama principal de mi proyecto en

//project/main/...

La última lista de cambios es presentado aquí @ 123, cuando decido crear una rama de la versión 1.0 en

//project/1.0/...

De P4V, se crea una nueva lista de cambios (digamos @ 130), resuelto y entregados.

A partir de la CLI, se vería algo como esto:

p4 integrate -c 123 -o //project/main/... //project/1.0/...
p4 submit

Más tarde, miro las listas de cambios bajo //project/1.0, y ver la lista de cambios @ 130 contiene una gran cantidad de archivos ramificados. ¿Cómo puedo encontrar la lista de cambios que no. que este fue originalmente ramificado de (es decir, @ 123)?

¿Fue útil?

Solución

p4 changes mostrará una lista de listas de cambios presentados, opcionalmente se filtra para una ruta específica.

p4 changes //project/main/...
Change 123 ... 'Very last change.'
Change 122 ... 'Next-to-last change.'
Change 100 ... 'Only two changes to go...'
...

No hay sorpresa, pero, como usted ha encontrado, p4 changes es menos útil al integrar todos esos cambios en un solo cambio:

p4 changes //project/1.0/...
Change 130 ... 'Integrated everything from main.'

El truco es usar la opción -i que incluye cualquier listas de cambios integrados en los archivos especificados .

p4 changes -i //project/1.0/...
Change 130 ... 'Integrated everything from main.'
Change 123 ... 'Very last change.'
Change 122 ... 'Next-to-last change.'
Change 100 ... 'Only two changes to go...'
...

Para obtener exactamente lo que quiere (123) que necesita para escribir un guión que filtra la salida de p4 changes -i //project/1.0/... para eliminar cualquier cambio que aparece por p4 changes //project/1.0/... (y luego tomar el cambio restante más reciente).

(Al explorar, con frecuencia también encuentro la opción -m max útil. Este límites cambios a la 'max' más reciente . Esto ayuda a que su salida no fluya fuera de la pantalla cuando hay muchos cambios.)

Otros consejos

No sé de cualquier orden simple que realiza lo que le gustaría hacer. Si usted está dispuesto a la escritura un poco y el comando no tiene que ejecutar rápido que tal vez podría intentar la escritura algo así como lo siguiente para todos archivos ramificados:

  1. Encuentra el archivo de origen / revisión de un archivo de destino.

      

    p4 fichero de registro // proyectos / 1.1 / foo.bar # 1
      //project/1.1/foo.bar
      ... # 1 6416 cambio rama en 2009/07/10 por foo @ bar (texto) 'levante 1,1'
      ... ... rama de // proyectos / main / foo.bar # 1, # 2

  2. Obtener la lista de cambios a la que fue sometido el archivo de origen / revisión.

      

    p4 fstat // proyectos / main / foo.bar # 2
      ... depotFile //project/main/foo.bar
      ... headAction edición
      ... headType texto
      ... headTime 1201771167
      ... headRev 2
      ... headChange 5353
      ... headModTime 1201770971

  3. Repetir para todos los archivos en rama y seleccione la mayor variación no (headChange arriba), que debe ser el cambio más reciente presentado a los padres antes de ramificación para ese archivo específico. Se podría obtener una lista completa de todos los archivos ramificados usando, por ejemplo, "archivos p4 //project/1.0 /...# 1".

(o tal vez tomar el camino más fácil y pedir ayuda Perforce)

Dado que ninguna de las respuestas hasta ahora proporcionan el código para encontrar la fuente o raíz de lista de cambios de una rama, pensé que proporcionan una sola línea para hacer precisamente eso. Este enfoque se basa en la sugerencia de @ cwan, e imprimirá la lista de cambios "padre" de la que se creó la rama. El argumento FIRST_BRANCH_CL necesita ser reemplazado con la lista de cambios creación rama (es decir, la primera lista de cambios presentado a la nueva rama). Como ejemplo concreto, en sustitución de FIRST_BRANCH_CL con 130 de la pregunta original, este de una sola línea haría 123 de salida.

p4 describe -s FIRST_BRANCH_CL | perl -lne 'if(/^\.\.\. (.+#[0-9]+) .+$/) {print quotemeta $1}' | xargs p4 filelog -m1 | perl -lne 'if(/^\.\.\. \.\.\. branch from (.+#[0-9]+)/) {print quotemeta $1}' | xargs p4 fstat | perl -lne 'if(/^\.\.\. headChange (\d+)/) {$MaxCL=$1 if($1 > $MaxCL)} END {print $MaxCL}'

Respuesta corta

Usar el gráfico de revisiones en P4V está de nuevo paso a través del tiempo e investigar la historia de integración. vídeo en el sitio web de Perforce .

He utilizado con éxito el gráfico de revisiones en las ramas con miles de archivos para realizar un seguimiento cuando un cambio en particular se integró en una rama. Por eso lo he recomendado y vinculado a un video de entrenamiento como la mayoría de la gente subestima porque no saben cómo usarlo.

Long respuesta

... [Eliminado]

ACTUALIZACIÓN: Como el gráfico de revisiones al parecer, es inviable, puede tal vez resolver esto utilizando un proceso / política, es decir, cuando se realiza la integran, añadir una nota en la descripción "ramificada @ CL 123 ". Se utilizó este enfoque nosotros mismos cuando la integración de un tronco a las líneas de la versión.

Si se usa la ficha historia en P4V le mostrará todas las listas de cambios presentados contra una rama, por lo que en este aspecto para

//project/1.0/...

Una vez que haya encontrado la más antigua lista de cambios presentó, a continuación, en cualquiera de los archivos de esa lista de cambios ver el gráfico de revisiones para ello, esto le mostrará la rama que el archivo (y el resto de los archivos) se integraron a partir de.

Voy a ver si puedo volver con los comandos p4 a hacer lo mismo.

Respuesta Actualizado: Creo que este trabajo voluntad. Prueba esto:

p4 interchanges from_branch  to_branch

Esto mostrará cambios no integradas en su rama principal a su rama de lanzamiento. Creo que se puede utilizar el número de lista de cambios superior menos 1 para encontrar su fuente de lista de cambios. interchanges es una característica no documentada Perforce CLI. Para obtener más información, tipo p4 help interchanges para obtener más información acerca de este comando.

Una vez más, que este trabajo. Puede haber algunos casos especiales en los que no lo hará, pero es mi mejor estimación a un problema difícil e importante.

"p4 integrado" trabajó para mí. Busque "copia de" en la descripción

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