Ok, estoy usando Perforce P4V para respaldar mi trabajo para un proyecto de Unity. Uno de mis compañeros de equipo verificó algunos cambios en los metarchivos que rompieron todo. Sin embargo, no hay problema, ¿verdad? Ese es el objetivo de usar P4. Simplemente podemos revertir eso. Solo... ¿revertir no funcionó?
El comportamiento que veo es que el archivo A se cambió en la lista de cambios 1. El archivo B se cambió en la lista de cambios 2, el archivo C y A se cambiaron en la lista de cambios 3.
Digamos que la lista de cambios 3 contiene el cambio incorrecto. Hice clic en la lista de cambios 2 en mi historial, luego hice clic en obtener revisión y marqué la casilla Forzar operación. Siendo la lista de cambios 2 el último buen estado conocido, lo que esperaba que sucediera era restaurar todos mis archivos al estado en el que se encontraba cuando se envió la lista de cambios 2.
En su lugar, se revirtió el archivo C, pero no el archivo A. Es como, dado que el archivo A no cambió en la lista de cambios 2, no se molestó en obtener esa versión.
Así que estoy en un estado en el que todos los metarchivos de Unity están mutilados y todas las referencias prefabricadas están rotas.
Cuando eso no funcionó, intenté usar obtener una revisión para volver al estado más actual. Luego usando Retroceder. Eso tampoco funcionó, los metarchivos aún estaban mutilados. Luego intenté seleccionar el último buen estado conocido y hacer retroceder toda la carpeta del proyecto a ese estado. De nuevo, no funcionó. Pero, de nuevo, es posible que haya mutilado tanto mi proyecto en ese punto que nada hubiera funcionado.
La única forma que he encontrado que parece estar revirtiendo correctamente los archivos y restaurando los enlaces rotos es seleccionar manualmente cada archivo o carpeta y revertirlo a la última confirmación correcta, que es diferente para cada archivo/carpeta ya que se agregaron y cambiaron en compromisos diferentes.
Lo que no entiendo es por qué la revisión forzada no lo hizo por sí sola. O cuál es la forma "correcta" de deshacer una mala confirmación.
Incluso intenté eliminar toda la carpeta de activos y luego usar la fuerza de revisión para extraer una copia completamente nueva del servidor usando la última confirmación válida conocida. Esto pareció funcionar perfectamente una vez, pero cuando traté de repetirlo para verificar mis resultados, volvió a perder todos los enlaces del metaarchivo. La única forma confiable de volver a un buen estado parece ser forzar manualmente la obtención de cada archivo y carpeta en la última confirmación correcta conocida individual.
Me he resignado a tener que arreglar manualmente mi error esta vez, pero realmente agradecería ayuda para saber cómo hacerlo de la manera correcta en el futuro.
Utilice el comando de p4 undo
.
p4 undo @BADCHANGELIST p4 submit
¡Eso es todo al respecto!
(Hay una operación similar en P4V llamada "Back Out"; he encontrado dificultades al usar esto y prefiero usar la línea de comando porque es más fácil, pero YMMV).
¡Tenga en cuenta que p4 undo
y p4 revert
son comandos completamente diferentes! Mucha gente se confunde con esto porque git
llama a su comando "deshacer" git revert
, pero una p4 revert
no es lo mismo que una git revert
(es más como git reset --hard
). No puede usar p4 revert
para deshacer algo que ya se envió; es solo para revertir su trabajo pendiente al último estado enviado desde el depósito.
Veré si puedo explicar qué salió mal con lo que intentaste:
Digamos que la lista de cambios 3 contiene el cambio incorrecto. Hice clic en la lista de cambios 2 en mi historial, luego hice clic en obtener revisión y marqué la casilla Forzar operación. Siendo la lista de cambios 2 el último buen estado conocido, lo que esperaba que sucediera era restaurar todos mis archivos al estado en el que se encontraba cuando se envió la lista de cambios 2.
En su lugar, se revirtió el archivo C, pero no el archivo A. Es como, dado que el archivo A no cambió en la lista de cambios 2, no se molestó en obtener esa versión.
IIRC cuando hace clic en una lista de cambios y la usa para sincronizar en P4V, por defecto hace p4 sync @CHANGE,CHANGE
en lugar de p4 sync @CHANGE
-- como ha observado, esto es muy poco útil si está tratando de " retroceder" a un estado anterior en todo el espacio de trabajo. Probablemente pueda solucionar esto haciendo clic en las casillas de verificación en el cuadro de diálogo de sincronización en algún lugar. Creo que si hace clic en una lista de cambios en la vista "Historial de carpetas", usa la ruta ( p4 sync path/...@CHANGE
) que debería funcionar mejor.
Una vez que haya logrado sincronizar el espacio de trabajo con el estado anterior, si desea que ese estado sea permanente, debe abrir los archivos para edit
("desproteger" en P4V), sync
para programar una resolución ("obtener más reciente" en P4V), resolve
(que también es "resolver" en P4V, asegúrese de aceptar la versión de your
espacio de trabajo (P4V podría llamar a esto "aceptar destino", no estoy seguro) y luego submit
. Nuevamente, recomiendo simplemente usar p4 undo
para que pueda omitir todos esos pasos manuales.