2010-04-21 4 views
14

Problema: 2 proyectos compartieron el enlace troncal y estaban actualizando algunos de los mismos archivos. Ahora es necesario lanzar un proyecto, por lo que se creó una nueva sucursal desde un punto de control antes de que comenzaran los proyectos.¿Es posible crear un parche utilizando un conjunto de listas de cambios?

Tengo una lista de solo mis números de lista de cambios de la línea principal. Usando eso puedo generar una lista de archivos modificados y salida de diff usando un script con una serie de comandos 'p4 describe #'.

¿Puedo volver a formatear esa salida y aplicarla a la nueva rama de alguna manera?

Respuesta

4

Perforce le permitirá elegir cuidadosamente las listas de cambios para la integración, lo que puede ser más fácil que tratar de generar y aplicar un parche. Perforce hará un seguimiento de las revisiones que haya integrado en el lugar, lo que puede facilitar la integración en el futuro.

Asumamos que solía tener un tronco:

//depot/mycode/trunk 

Y usted marcó en todos los cambios allí. Usted ramificado tronco en algún momento en el pasado para:

//depot/mycode/rel 

y usted tiene una lista de listas de cambios en el tronco de fusionar. A partir de una especificación del cliente que se asigna rel, integrar cada lista de cambios:

p4 integrate //depot/mycode/trunk/[email protected],1234 //depot/mycode/rel/... 

donde 1234 es el número de cambios. Resolver después de cada integración. También es posible que desee construir, probar y comprometer sus integraciones en diversos puntos de control durante su integración, si puede identificar buenos puntos para hacerlo. (Perforce puede manejar integraciones múltiples por commit, pero si comete un error necesitará volver a la última versión registrada y volver a hacer las integraciones intermedias y resuelve.)

+0

¿Por qué tengo que resolver si voy a ser el único que me estoy registrando? ¿No se integra el factor de lista de cambios solo en el código que se modificó para esa confirmación? Puedo imaginar conflictos si estaba mirando todo el archivo. – webXL

+0

Perforce lo hace resolver cada vez que se integra en caso de que necesite abordar, a mano, cualquier conflicto. En su caso, tendría conflictos si su nueva lista de cambios modificó el código agregado en una lista de cambios anterior. –

19

Respuesta al título: "¿Es posible crear un parche usando un conjunto de listas de cambios? " Sí.

p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch. 

Puede utilizar /tmp/cln.patch como entrada para la utilidad de parche. Aquí, 'cln' es el número de lista de cambio enviado para el que desea crear un parche.

+2

Tenga en cuenta que 'p4 diff2' no generará diffs para archivos añadidos o eliminados, por lo que necesitaría un manejo especial para obtener' patch' para agregarlos o eliminarlos. – jamesdlin

8

Acabo de pasar dos horas luchando con esto. Utilizando cygwin patch, tuve que comunicar los caminos hasta que fueron reconocidos.

Al final, el encantamiento mágico era la siguiente (roto a través de líneas):

p4 diff2 -u //depot/foo/main/[email protected] //depot/foo/main/[email protected] | 
    sed '[email protected]//depot/@E:/Source/@g' | 
    sed '/^+++\|---/[email protected]/@\\@g' | 
    patch 

Eso es:

  1. Uso p4 diff2 para obtener un diff unificado (-u) de parte de la depósito entre las dos revisiones que me importan. La segunda lista de cambios es la que antes de la primera que quiero, de lo contrario no está incluida en el diff.
  2. Utilice sed para cambiar el //depot/ al E:/Source/, que es donde vive mi espacio de trabajo.
  3. Cambia las barras diagonales hacia barras diagonales inversas dobles (esto parece hacer que funcione).
  4. Pipe los resultados a través de patch.

Cygwin patch es lo suficientemente inteligente como para comprobar los archivos de Perforce, pero no estoy seguro de cómo hacerlo en silencio. Indica con Get file 'e:\Source\foo\whatever' from Perforce with lock?.

Esto es con p4 versión 2010.1, una instalación bastante reciente de Cygwin, que se ejecuta en PowerShell.

Ah, y después de esto, patch escribió finales de línea de estilo Unix, así que usé u2d para arreglarlos.

+1

Ver mi comentario a http://stackoverflow.com/a/4925343/179715 para una advertencia sobre el uso de 'p4 diff2'. – jamesdlin

Cuestiones relacionadas