visual vcs teamhub team license hub helix deveo perforce

vcs - Perforce: ¿Cómo p4 integro una lista de cambios local no comprometida?



perforce helix core (6)

Aquí está mi escenario:

Tengo dos proyectos projectA y projectB. Un branchspec auto-integra projectA a projectB. Ahora, tengo una lista de cambios que modifica algunos archivos en el proyecto A. Todavía no he enviado / enviado esta lista de cambios.

Me gustaría que esta lista de cambios fuera solo al proyecto B

Haciendo una p4 integra -b branchspec -c changelistNumber

muestra

"Todas las revisiones están integradas".

¿Cómo puedo integrar una lista de cambios no comprometida?


Golpeó un script rápido de powershell 2 para hacer esto:

https://gist.github.com/1173044

param([int]$changelistNum, [string]$destBranch) $regex = "^/s+//[^/]+(//S+)/s" $sourceFiles = p4 change -o $changelistNum | select-string $regex | %{$_.matches[0]} $sourceFiles | %{ $sourcePath = (p4 where $_.groups[0].value.trim()).split('' '')[2]; $destPath = (p4 where ($destBranch + $_.groups[1].value)).split('' '')[2]; p4 edit $destPath; copy $sourcePath $destPath; p4 add $destPath; }

(no estoy seguro de por qué la sangría no funciona arriba - ¿He prefijado el interior del bloque de script con 8 espacios?)

El script extrae todos los archivos de la descripción de la lista de cambios, y para cada uno trata de encontrar la ruta correspondiente en la otra rama. Fuerza bruta, tanto una edición p4 para cada archivo como una adición p4, en lugar de intentar adivinar cuál es la correcta. ¡Es bastante detallado!

Para copiar la lista de cambios 443 a la rama myBranch:

Copy-PendingChangelistToBranch.ps1 443 "//myBranch"


Me topé con la misma situación, aquí está mi solución (muy similar a la de Jeff, pero no hay Enviar en el proceso), tal vez algún día ayude a alguien:

  1. Integre (y resuelva) los archivos relacionados de ProjectB a ProjectA mientras que los archivos editados pero no enviados están allí.
  2. Echa un vistazo a los archivos relacionados en ProjectB.
  3. Copie manualmente los archivos relacionados de ProjectA a ProjectB.
  4. Revertir archivos en ProjectA.

Perforce tiene una manera mucho más fácil de lograr esto:

  1. Coloque su lista de cambios en la rama A (observe el número de lista de cambios, lo llamaremos NUM para referencia aquí)

  2. Cree una asignación de rama entre rama A y rama B (lo llamaremos A_to_B)

  3. Ejecuta el siguiente comando:

    p4 unshelve -s NUM -b A_to_B


Puede usar P4_Shelve para mover los cambios a una nueva rama que luego podría integrar en projectB.


Solución Hack-Ish:

  1. Echa un vistazo a los archivos en el proyecto B
  2. Copie manualmente los archivos del proyecto A al proyecto B (no están protegidos contra escritura debido al paso 1)
  3. Lista de cambios en el proyecto A
  4. Enviar a B
  5. Integrar archivos de B a A y resolver
  6. Anule los archivos del paso 3. Resuelva, según sea necesario, aceptando el suyo.
  7. Presentar a A cuando esté listo

Otro enfoque es crear una rama separada donde realice su trabajo y luego integrarla con A o B según sea necesario.

La idea general es que Perforce trabaja en términos de listas de cambios enviadas o archivadas. La idea de integrar una lista de cambios no comprometida parece ir en contra del grano natural de Perforce, lo que hace que estas soluciones sean engorrosas.


p4 diff -u your/branch/... | patch -p x -d your/otherbranch

Donde x es un int, debe probar desde 0 hasta que funcione, use --dry-run in patch para probar. (-p es el número de directorios que se eliminará para que la ruta del archivo en su / branch y su / otherbranch coincidan, 2 en este ejemplo)