Una pregunta que surge ocasionalmente es cuál es la mejor manera de determinar la lista de cambios con la que se sincronizó por última vez en Perforce. Esto a menudo es necesario para cosas como inyectar el número de la lista de cambios en la información de revisión mediante el sistema de compilación automático.
117
p4 changes | head -1
parece más fácil que la mayoría de estas soluciones.Respuestas:
Recomiendo lo contrario para los sistemas de compilación automática: primero debe obtener la última lista de cambios del servidor usando:
luego sincronice con ese cambio y regístrelo en la información de revisión. La razon es la siguiente. Aunque Perforce recomienda lo siguiente para determinar la lista de cambios con la que se sincroniza el espacio de trabajo:
notan algunas trampas:
y hay un problema adicional que no mencionan:
Si debe sincronizar primero y grabar más tarde, Perforce recomienda ejecutar el siguiente comando para determinar si ha sido mordido por las trampas anteriores; debe indicar que no se sincronizó ni eliminó nada:
fuente
#have
lugar de@clientname
, lo que le evita tener que buscar el nombre del espacio de trabajo de su cliente.Solo para responder esto yo mismo de acuerdo con la sugerencia de Jeff de usar Stackoverflow como un lugar para guardar fragmentos técnicos ...
Desde la línea de comando, use:
Y simplemente reemplácelo con el nombre de la especificación de su cliente. Esto producirá una salida del formulario:
Que se analiza fácilmente para extraer el número de lista de cambios.
fuente
Puede intentar encontrar el número máximo de cambios en la salida del comando "archivos p4". Sin embargo, el directorio de trabajo no debe contener confirmaciones posteriores a la sincronización. Esto es un poco mejor que
ya que este último parece ejecutarse en el servidor y puede fallar en grandes árboles de origen debido a los límites de "MaxResults".
donde p4lastchange.py se basa en el código de la presentación Using P4G.py From the Command Line de JTGoldstone, Kodak Information Network / Ofoto, 15 de abril de 2005.
fuente
Si está utilizando P4V, puede hacerlo gráficamente:
fuente
p4 changes -m1 @clientname
que es la forma "recomendada" de hacerlo para mi cliente, tarda unos 10 minutosesto es lo que uso:
para el mismo cliente toma 2,1 segundos
fuente
p4 changes -m1 @clientname
corre sin fin ...p4 cstat ...#have | grep change | awk '$3 > x { x = $3 };END { print x }'
realmente funciona! ¡Gracias!También puede usar el comando cstat:
p4 ayuda cstat
fuente
Para una compilación seria (una que se está preparando para la prueba), especifique explícitamente la etiqueta deseada o el número de lista de cambios, sincronice con la etiqueta, e incorpórela en los artefactos de compilación.
Si no se proporciona una lista de cambios (o etiqueta), utilice
p4 counter change
para obtener el número de cambio actual y regístrelo. Pero aún necesitas sincronizar todo con ese número de cambio.No creo que pueda lograr exactamente lo que desea, porque en general, un espacio de trabajo completo no está sincronizado con un número de lista de cambios en particular. Uno puede sincronizar explícitamente algunos archivos con revisiones anteriores, y luego un solo número de lista de cambios no tiene sentido. Es por eso que
sync
se requiere una actualización para garantizar que un único número de lista de cambios represente con precisión la versión del código.Con respecto a los comentarios: Sí, mi respuesta está destinada a los administradores de configuración que preparan una compilación para entregarla a QA. Nuestros desarrolladores normalmente no se sincronizan como parte de una compilación; hacen una compilación antes de enviarla, para que puedan asegurarse de que sus cambios no rompan la compilación o las pruebas. En ese contexto, no nos molestamos en incrustar una etiqueta de repositorio.
Con su enfoque, está asumiendo que todo su espacio de trabajo se sincronizó para encabezar en el momento de su última presentación de lista de cambios, y esa lista de cambios incluía todos sus archivos abiertos. Es demasiado fácil equivocarse en esas suposiciones, difícil de detectar y terriblemente caro en términos de tiempo perdido. Por otro lado, resolver el problema es fácil, sin inconvenientes. Y debido a que se puede especificar explícitamente un número de lista de cambios, no importa qué revisión necesite o qué tan rápido cambie el código base.
fuente
Para todo el depósito (no solo su espacio de trabajo / cliente)
hace el trabajo, simplemente diciendo la última lista de cambios.
fuente
Lo mejor que he encontrado hasta ahora es sincronizar con cualquier lista de cambios que desee crear y luego usar los cambios -m1 //...#have para obtener la lista de cambios local actual (revisión).
p4 sync @CHANGELIST_NUM p4 cambia -m1 //...#have | awk '{imprimir $ 2}'
Le da el número de lista de cambios que puede usar donde quiera. Actualmente estoy buscando una forma más sencilla que p4 changes -m1 //...#have.
fuente
No estoy seguro de si obtuvo la respuesta que necesitaba, pero tuve un problema similar. El objetivo era escribir en nuestro logger la versión específica del proyecto. El problema fue que mientras creamos nuestro propio archivo MAKE, el sistema de compilación general está controlado por nuestra administración de configuración. Esto significa que todas las soluciones que dicen "sincronizar con algo y luego hacer algo" no funcionan realmente y no quería cambiar manualmente la versión cada vez que confirmamos (una fuente segura de errores). La solución (que en realidad se insinúa en algunas de las respuestas anteriores) es la siguiente: en nuestro archivo MAKE, hago p4 changes -m1 "./...#have" El resultado para esto es Change change_number on date by user @ client ' msg ' Simplemente creo el mensaje en una cadena que imprime el registrador (el número de cambio es el elemento importante, pero el otro también es útil para decidir rápidamente si una determinada versión contiene cambios que sabe que hizo sin tener que comprobarlo). Espero que esto ayude.
fuente