¿Cómo obtener una versión específica de un archivo en Mercurial?

114

Soy nuevo en Mercurial. Simplemente no puedo encontrar el comando correcto. Intenté actualizar / pagar sin suerte. Estoy usando un repositorio local. Gracias

Codismo
fuente
@Omnifarious: comprometí una versión estable de un archivo. Luego continuó trabajando en el archivo, pero pronto me di cuenta de que necesitaba la última versión "buena". Esto se puede hacer mediante una actualización en svn, pero cuando intento actualizar hg, dice "0 archivos ..."
Codism

Respuestas:

153

Creo que quieres hg revert -r<rev> <file>(esto cambiará ese archivo para que sea como estaba en la revisión dada).

djc
fuente
Sí, eso es exactamente lo que quiere. :-)
Omnifarious
9
o simplemente hg revert <nombre de archivo> si desea descartar sus cambios actuales y obtener el último que se
confirmó
@BlackTigerX Sin la revisión, un archivo no modificado no se revertirá a nada, incluso si no es la versión confirmada más recientemente. A veces lo uso para seleccionar archivos entre revisiones, por lo que es importante.
user2864740
83

Como dijo djc, revertmodifica un archivo en su lugar para que coincida con una revisión anterior. Si no desea que esté en su lugar, puede usar hg cat -r revisionid filename(sustituyendo el ID de revisión y el nombre de archivo, por supuesto) que generará el archivo en la salida estándar, adecuado para redirigir a cualquier lugar que desee.

Ry4an Brase
fuente
4
purrrfect, exactamente lo que deseaba.
yota
Genial, siempre es bueno escuchar algo así.
Ry4an Brase
24

hg revertde hecho resuelve este problema. Pero creo que está confundido acerca de una gama más amplia de cosas que simplemente la respuesta a su pregunta y quiere intentar responder de manera más completa.

hg updatees un comando de repositorio completo y no funcionará en archivos individuales. Es diferente a la subversión svn updateen este sentido. Si lo hace hg --help update, puede ver que este es el caso porque el comando no tiene ningún argumento de archivo. Se puede usar para mover todo su repositorio a una instantánea en particular, pero no se puede usar para hacerlo en un solo archivo.

Si escribe hg --help, verá una lista de comandos. Es una lista bastante grande y algo abrumadora, pero si la lee, encontrará esta línea:

revert       restore individual files or directories to an earlier state

Ahora, si solo desea el último estado para fines de comparación, hay otro comando que puede interesarle, y ese es hg cat. Eso le permitirá imprimir el contenido de un archivo en cualquier revisión en particular. Luego puede redirigir su salida a otro archivo. Luego, puede tener la versión anterior conocida de su archivo y la versión anterior para compararlas una al lado de la otra.

La razón por la que Mercurial tiene un updatecomando separado es que es posible hacer algo en Mercurial que es imposible en Subversion. Puede utilizar updateuna versión anterior, realizar cambios y luego confirmar. Esto creará una rama. El updatecomando también tiene el efecto de cambiar la revisión principal del directorio de trabajo actual, así como también cambiar el contenido de todos los archivos en ese directorio a las versiones de esa revisión principal.

Eso significa que revertcambia el contenido de un archivo (o incluso todo el repositorio si le da al comando los argumentos correctos) pero deja la revisión principal de la copia de trabajo actual igual.

Puede averiguar la revisión principal (o revisiones en el caso de una fusión) de la copia de trabajo actual usando el hg parentscomando.

En Subversion, las revisiones son una progresión estrictamente lineal. Mercurial crea ramas en un abrir y cerrar de ojos, y son casi tan fáciles de fusionar. Las revisiones forman un DAG, no una progresión estrictamente lineal.

De todo género
fuente
13

Para extraer una revisión específica de un archivo específico, puede hacer esto en Windows:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

Aquí, 9 es el número de revisión.

O mejor:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"
usuario2173353
fuente
1

Vine aquí tratando de obtener la versión anterior, así que aquí está el comando exacto:

hg revert -r .~1 <file>
cmcginty
fuente