Una pregunta que surge ocasionalmente es cuál es la mejor forma de determinar la lista de cambios que se sincronizó por última vez en Perforce. Esto a menudo es necesario para cosas como inyectar el número de lista de cambios en la información de revisión mediante el sistema de compilación automático.Determinación de la última lista de cambios sincronizada en Perforce
Respuesta
recomiendo lo contrario para construir sistemas automáticos: primero debe obtener la última lista de cambios desde el servidor usando:
p4 changes -s submitted -m1
luego sincronice con ese cambio y grabarlo en la información de revisión. La razon es la siguiente. Aunque Perforce recommends the following para determinar la lista de cambios a la que se sincroniza el espacio de trabajo:
p4 changes -m1 @clientname
que tenga en cuenta unos aspectos críticos:
- Esto sólo funciona si no se ha presentado nada del espacio de trabajo de que se trate.
- También es posible que el espacio de trabajo del cliente no esté sincronizado con ninguna lista de cambios específica.
y hay una Gotcha adicional que no mencionan:
- Si la más alta lista de cambios al que la sincronización se produjo archivos estrictamente borrados desde el espacio de trabajo, se informará de la próxima más alta lista de cambios (a menos que , también, archivos estrictamente eliminados).
Si primero debe sincronizar y registrar más tarde, Perforce recomienda ejecutar el siguiente comando para determinar si ha sido afectado por los errores anteriores; se debe indicar nada se sincroniza o se retira:
p4 sync -n @changelist_number
Sólo para responder a esto mismo de acuerdo con la sugerencia de utilizar Stackoverflow como un lugar para guardar fragmentos técnicas de Jeff ....
Desde el uso de línea de comandos:
p4 changes -m1 @<clientname>
Y basta con sustituir el nombre de su cliente spec. Esto producirá salida del formulario:
Change 12345 on 2008/08/21 by [email protected] '....top line of description...'
que se analiza fácilmente para extraer el número de la lista de cambios.
Estoy recibiendo: Solicitud demasiado grande (más de 1500000); ver 'p4 help maxresults'. – user674669
@ user674669: use la opción -m1 que solo devuelve la última (1) lista de cambios – panako
¿Cuál es el nombre del cliente? Tengo el espacio de trabajo del puerto del servidor? Nombre de usuario ??? – marsh
Para una compilación seria (una que se está preparando para probar), especifique explícitamente la etiqueta deseada o el número de lista de cambios, sincronícela con la etiqueta, y empújela en los artefactos de compilación.
Si no se proporciona una lista de cambios (o etiqueta), use p4 counter change
para obtener el número de cambio actual y grábelo. Pero aún necesita sincronizar todo utilizando ese número de cambio.
No creo que pueda lograr exactamente lo que desea porque, en general, todo un espacio de trabajo no está sincronizado con un número de lista de cambios en particular. Uno puede sincronizar explícitamente algunos archivos a revisiones antiguas, y luego un solo número de lista de cambios no tiene sentido. Es por eso que se requiere un nuevo sync
para garantizar que un solo número de lista de cambios represente con precisión la versión del código.
En cuanto a los comentarios: Sí, mi respuesta está diseñada para uso por los administradores de configuración que preparan una acumulación de dar a control de calidad. Nuestros desarrolladores normalmente no se sincronizan como parte de una compilación; hacen una compilación antes de enviar — para que puedan asegurarse de que sus cambios no rompan la compilación o las pruebas. En ese contexto, no nos molestamos en insertar una etiqueta de repositorio.
Con su enfoque, está asumiendo que todo su espacio de trabajo se sincronizó a la cabeza en el momento de su última presentación de la lista de cambios, y esa lista de cambios incluye todos sus archivos abiertos. Es muy fácil confundirse con esas suposiciones, difíciles de detectar y terriblemente caras en términos de tiempo perdido. Por otro lado, resolver el problema es fácil, sin inconvenientes. Y debido a que un número de lista de cambios puede especificarse explícitamente, no importa qué revisión necesite ni cuán rápido esté cambiando la base de código.
Erickson: buena sugerencia, pero creo que cubre un conjunto ligeramente diferente de circunstancias que la respuesta que proporcioné. Ciertamente, el contador funcionará si es probable que solo tenga la revisión principal, y el servidor no está lo suficientemente ocupado como para que alguien, tal vez trabajando en otro proyecto, no haga un envío entre la sincronización y la llamada al contador p4. Por lo tanto, creo que su sugerencia es probablemente la mejor cuando el sistema de compilación está haciendo una atracción distinta a la compilación. Mi respuesta cubre casos en los que la sincronización se puede separar a tiempo de la compilación. Ambos son válidos dependiendo de las circunstancias, creo. –
es posible que trate de encontrar el número máximo cambio en la salida del comando "archivos P4". Sin embargo, el directorio de trabajo no debería contener confirmaciones posteriores a la sincronización. Esto es sólo un poco mejor que
p4 changes -m1 "./...#have"
ya que esta última se parece funcionar en el servidor y puede fallar en grandes árboles de origen debido a los límites "maxResults".
$ p4 changes -m1 "./...#have"
Request too large (over 850000); see 'p4 help maxresults'.
$ p4 -G files "./...#have" | python c:/cygwin/usr/local/bin/p4lastchange.py
Files: 266948
2427657
donde p4lastchange.py se basa en el código de la presentación Using P4G.py From the Command Line por JTGoldstone, Red de Información Kodak/Ofoto, 15 de abril de 2005.
#! /usr/bin/env python
import sys, os, marshal
if os.name == "nt":
# Disable newline translation in Windows. Other operating systems do not
# translate file contents.
import msvcrt
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
lastcl = 0
num = 0
try:
while 1:
dict = marshal.load(sys.stdin)
num = num + 1
for key in dict.keys():
# print "%s: %s" % (key,dict[key])
if key == "change":
cl = int(dict[key])
if cl > lastcl:
lastcl = cl
except EOFError:
pass
print "Files: %s" % num
print lastcl
El mejor que he encontrado hasta el momento es realizar la sincronización con la lista de cambios que desee construir y luego usar los cambios -m1 //...#have para obtener la lista de cambios local actual (revisión).
p4 sincronización @CHANGELIST_NUM p4 cambia -m1 //...#have | awk '{print $ 2}'
Te da el número de lista de cambios que puedes usar donde quieras. Actualmente estoy buscando una manera más simple que p4 cambia -m1 //...#have.
+1 para la secuencia de comandos awk – Watt
También puede utilizar el comando cstat:
ayuda p4 cstat
cstat -- Dump change/sync status for current client
p4 cstat [files...]
Lists changes that are needed, had or partially synced in the current
client. The output is returned in tagged format, similar to the fstat
command.
The fields that cstat displays are:
change changelist number
status 'have', 'need' or 'partial'
Para todo el depósito (no sólo su espacio de trabajo/cliente)
p4 counter change
hace el trabajo, sólo diciendo la última lista de cambios.
Tenga en cuenta que esto informa el número de la última lista de cambios de depósito, INCLUIDAS las listas de cambios pendientes (es decir, las que aún no se han enviado). Por lo tanto, cualquier usuario que inicie un nuevo trabajo en su cliente afectará este número. Esto será diferente de la última lista de cambios sincronizada con el espacio de trabajo local. – jasonmray
No estoy seguro de si obtuvo la respuesta que necesitaba pero tuve un problema similar. El objetivo era escribir en nuestro registrador la versión específica del proyecto. El problema fue que, mientras hacemos nuestro propio archivo MAKE, el sistema de compilación general está controlado por nuestra gestión de configuración. Esto significa que todas las soluciones que dicen "sincronizar con algo y luego hacer algo" realmente no funcionan 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 cambios -m1 "./...#have " El resultado 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 ha hecho a sí mismo sin ir a forzosamente para comprobar). Espero que esto ayude.
p4 changes -m1 @clientname
que es la forma "recomendado" que lo haga por mi cliente tarda unos 10 minutos
esto es lo que uso:
p4 cstat ...#have | grep change | awk '$3 > x { x = $3 };END { print x }'
para el mismo cliente toma 2,1 segundos
¿Cuál es el nombre del cliente? ¿Cómo puedo encontrar esta información? – marsh
El nombre de @marsh client (o también workspace) es el nombre de un objeto forzado que contiene el mapeo desde el servidor depo a su sistema de archivos local – gsf
Subiendo esta respuesta, ya que responde la pregunta real en lugar de decir "no hagas eso "(Que es un punto válido, pero no responde la pregunta). –
Si está utilizando P4V puede hacerlo de forma gráfica:
- En la pestaña Panel (Ver-> Panel de Control) seleccionar una carpeta y verá una lista de listas de cambios con las que aún no se ha actualizado la carpeta. Tenga en cuenta el número más bajo (en la fila más alta).
- Asegúrese de que en el Árbol del área de trabajo haya seleccionado la misma carpeta que anteriormente en el Tablero. Luego, vaya a la pestaña Historial (Ver-> Historial) y desplácese hacia abajo hasta el número anotado anteriormente. El número justo debajo de ese número es el número de tu lista de cambios actual.
- 1. Configurando Perforce scm en el proyecto maven para obtener la última lista de cambios
- 2. Perforce: Encuentra lista de cambios de origen de una rama
- 3. Nueva aplicación de lista de cambios en Perforce
- 4. Perforce: Sucursal de una lista de cambios específica Por fuerza
- 5. Java lista sincronizada de bucle
- 6. ¿Cómo agregar un archivo en la lista de cambios archivados en Perforce?
- 7. Java Lista sincronizada
- 8. ¿Cómo encontrar las listas de cambios enviadas en la última semana para un usuario particular que usa Perforce?
- 9. En Perforce, liste todos los conjuntos de cambios por usuario
- 10. ¿Cómo puedo tomar mi lista de cambios local y enviársela a alguien más en Perforce?
- 11. ¿Cuál es la variable de Jenkins que contiene la lista de cambios de Perforce que activó la compilación?
- 12. ¿Debo enviar los archivos sin cambios a Perforce?
- 13. En Perforce, ¿cómo puedo encontrar la ruta local para los archivos en una lista de cambios pendiente?
- 14. ¿Cuáles son los cambios de última hora en clojure 1.3?
- 15. Uso de Mercurial con Perforce
- 16. NullPointerException en la cuenta sincronizada
- 17. ¿Supervisa la lista de directorios por cambios?
- 18. En Perforce, ¿cómo obtengo una lista de los archivos desprotegidos?
- 19. Lista de archivos extraídos por otros en Perforce
- 20. Plugin de eclipse de Perforce: diferencia entre "obtener la última revisión" y "sincronizar con el almacén"
- 21. Determinación del primer valor disponible en una lista de enteros
- 22. ¿Cómo puede encontrar/eliminar rápidamente todas las listas de cambios vacías en Perforce?
- 23. Perforce culpa
- 24. ¿Cómo buscar el texto de las descripciones de listas de cambios en Perforce?
- 25. Mercurial: compruebe si la última extracción/actualización introdujo cambios
- 26. ¡la sección sincronizada no bloquea!
- 27. Determinación de la URL redirigida en Python
- 28. Perforce pendiente diff secuencia de comandos diff
- 29. Determinación de la lista de argumentos de función en Common Lisp
- 30. Migrando de git a Perforce
Gracias por la información adicional. –
¿Por qué es que "Esto solo funciona si no ha enviado nada desde el área de trabajo en cuestión"? – gdw2
Si envía un cambio, 'p4 cambia -s enviado -m1' devolverá su número de lista de cambio. Por ejemplo, supongamos que sincronizas con la lista de cambios 5, esperas un par de horas y luego envías la lista de cambios 10. El comando de cambios anterior devolverá 10. – Rinn