2010-01-21 33 views
87

Soy nuevo en Mercurial. Simplemente no puedo encontrar el comando correcto. Intenté actualizar/pagar sin suerte. Estoy usando el repositorio local. Gracias¿Cómo obtener una versión específica de un archivo en Mercurial?

+0

¿Qué quiere decir por 'versión especial'? ¿Tienes alguna versión en particular? ¿Qué intenta lograr exactamente obteniendo una versión especial? – Omnifarious

+0

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

Respuesta

125

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

+0

Sí, eso es exactamente lo que quiere. :-) – Omnifarious

+9

o simplemente hg revertir si desea descartar sus cambios actuales, y obtener lo último que se haya comprometido – BlackTigerX

+0

@BlackTigerX Sin la revisión, un archivo no modificado no se revertirá a nada, incluso si no es el más versión recientemente comprometida. A veces uso esto para 'seleccionar' archivos entre revisiones, por lo que es importante. – user2864740

73

Como djc dijo revert altera un archivo en su lugar para que coincida con una revisión anterior. Si no lo desea, puede usar hg cat -r revisionid filename (sustituyendo revisionid y nombre de archivo del curso) que generará el archivo en stdout, adecuado para redirigir a cualquier lugar que desee.

+3

purrrfect, exactamente lo que deseaba. – yota

+0

Impresionante, siempre es bueno escuchar algo así. –

23

hg revert de hecho resuelve este problema. Pero creo que estás confundido acerca de una gama más amplia de cosas que simplemente la respuesta a tu pregunta y quieres tratar de responder más completamente.

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

Si escribe hg --help verá una lista de comandos. Es una lista bastante grande y un tanto desalentador, pero si usted lee a través de ella, se encuentra esta línea:

revert  restore individual files or directories to an earlier state 

Ahora, si lo que desea el último estado con fines comparativos, hay otro comando que puede ser interesado, y eso es hg cat. Eso le permitirá imprimir el contenido de un archivo en cualquier revisión en particular. Luego puede redirigir su salida a algún otro archivo. Entonces puede tener la versión buena conocida anterior de su archivo y la versión anterior para comparar una al lado de la otra.

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

Eso significa revert cambia 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 encontrar la revisión principal (o revisiones en el caso de una combinación) de la copia de trabajo actual utilizando el comando hg parents.

En las revisiones de Subversion se trata de 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.

9

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

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

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

O aún mejor:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>" 
Cuestiones relacionadas