una - inscribirme para obtener tarjeta de la farmacia cvs
Cómo revertir a la confirmación previa en CVS (5)
Por razones heredadas, estoy usando CVS en un proyecto. Recientemente cometí algunos cambios que rompieron nuestro código y tuve que revertirlos. ¿Cuál es el análogo de CVS de git revert -r <old_revision>
?
Al analizar preguntas anteriores como Cómo revertir cambios grandes , los confirmaciones de CVS no agrupan los archivos que se modificaron. ¿Es la única forma de revertir usando fechas?
Además, ¿cuál es la mejor manera de ver los cambios pasados? El registro CVS genera demasiada información, la mayoría de las cuales es innecesaria. Quiero ver mensajes de confirmación y archivos modificados.
Además de revertir por fecha, puede revertir por etiqueta, si el conjunto de archivos al que desea volver está etiquetado.
Tuve lo que creo que es una situación similar e hice lo siguiente que afectó a toda la carpeta en lugar de archivo por archivo:
- cvs exporta la ''versión anterior'' por etiqueta (o puede hacerlo por fecha) a una nueva carpeta
- asegúrese de que la ''versión actual'' esté revisada, actualizada y en vivo
- Copie los archivos de la versión anterior en la carpeta con la versión actual.
- Cometer el resultado con un comentario adecuado.
Este enfoque deberá modificarse si se ha agregado / eliminado algún archivo entre la versión anterior y la versión actual.
El historial de CVS mostrará la reversión.
Aquí están los comandos.
1) suceso falso suceda
2) Comprueba su última versión.
cvs log file.txt
digamos que 1.25 es la última versión debido a un falso compromiso, por lo que queremos volver a su versión anterior 1.24.
3) Así que sigamos adelante como abajo.
cvs update -r 1.24 file.txt // checkout older version
cp file.txt old.txt // create backup
cvs update -A file.txt // again move to latest one
cp old.txt file.txt // replace old to at latest one.
cvs status file.txt // It will shows as locally modified.
cvs commit -m "Reverting false commit" file.txt
cvs log file.txt // new 1.26 will be created.
4) Solo para asegurarnos de que 1.26 y 1.24 sean iguales.
cvs diff -r 1.26 -r 1.24 file.txt
Si todos los pasos anteriores son correctos, diff no mostrará ninguna diferencia.
La documentación de CVS se puede encontrar here , pero desde este site se explica cómo revertir un solo archivo:
HACER DE LA VERSIÓN ANTIGUA LA VERSIÓN ACTUAL
Guarde la versión de "oldfile" en otra cosa y revise la versión "actual".
Nota: aún debe hacer la actualización -A para obtener la versión actual, porque aunque haya cambiado de nombre
"oldfile" la etiqueta aún está asociada con el archivo "oldfile" y no se elimina hasta que se complete la actualización -A.Luego cambie el nombre de la versión "antigua" a la versión "actual".
% mv oldfile oldfile.old.ver
Actualización de% cvs -A oldfile
% mv oldfile.old.ver oldfile
% cvs commit -m "revertir a la versión 1.5" archivo antiguoAhora puede continuar revisando, editando y comprometiendo el archivo como de costumbre.
Esto no manejará muchos archivos de manera recursiva, pero espero que ayude.
Para retroceder una revisión de un solo archivo, use cvs admin -o
.
Consulte la documentación de CVS ( info cvs
si está en un sistema similar a Unix) para obtener más información, o vea este enlace .
Citando el manual:
`-oRANGE''
Deletes ("outdates") the revisions given by RANGE.
Note that this command can be quite dangerous unless you know
_exactly_ what you are doing (for example see the warnings below
about how the REV1:REV2 syntax is confusing).
If you are short on disc this option might help you. But think
twice before using it--there is no way short of restoring the
latest backup to undo this command! If you delete different
revisions than you planned, either due to carelessness or (heaven
forbid) a CVS bug, there is no opportunity to correct the error
before the revisions are deleted. It probably would be a good
idea to experiment on a copy of the repository first.
Luego ofrece varias formas de especificar una revisión, o un rango de revisiones, para eliminar.
Como dice, esto puede ser bastante peligroso; borra la información del repositorio, que suele ser exactamente lo que cualquier sistema de control de revisiones intenta evitar.
Si no necesita cambiar el historial de esta manera, solo tome una copia de la versión anterior y verifique la mala revisión, como sugiere la respuesta de Dave M.
Y tienes razón, el énfasis de CVS está en los archivos individuales; Los sistemas más modernos tienden a enfatizar el estado de todo el repositorio.
Hasta ahora, todo esto solo le permite procesar un archivo a la vez.
Pero puede revisar un módulo completo en una fecha específica en un directorio separado ( cvs checkout -D date
), luego copiar los archivos sobre su copia actual del módulo y verificar todo. Si hace esto, asegúrese de haga un "cvs diff" para que sepa exactamente qué cambios está haciendo.
No conozco una buena manera de obtener información de registro más concisa. cvs log
sin argumentos le da un registro para cada archivo, no en orden cronológico. cvs log filename
le proporciona un registro para un archivo específico, pero no lo relaciona con otros archivos que pueden haber sido modificados al mismo tiempo. Personalmente, podría considerar escribir un script en Perl que recopile la información impresa por el cvs log
y la reorganice para su visualización, pero probablemente sea más trabajo del que está interesado en hacer.
Existen herramientas para importar repositorios CVS a algo más moderno.
cvs update -j 1.6 -j 1.5 Filename.java