2010-07-27 11 views
12

Me gustaría restaurar un archivo que se ha eliminado en alguna confirmación y restaurarlo con un nombre diferente, para que comparta el historial. En subversión, haríaMercurial: restaurar archivos

svn cp [email protected] dest 

es decir, usar revisiones de clavijas. ¿Cuál es el equivalente en Mercurial?

+0

No creo que hg pueda rastrear el historial de un archivo entre renombrados directamente. Pregunta interesante sin embargo. –

Respuesta

7

No creo que Mercurial tenga una forma integrada de hacerlo. Pero creo que se puede conseguir el mismo efecto mediante:

hg up -C REV # Update to revision containing a copy of the file 
<modify the file in question> 
hg commit # Create second head based on old revision 
hg merge # Merge two heads into one 
# Note: make sure to choose to have the file exist 
hg commit 
hg mv MYFILE MYNEWNAME 

Esto tendrá el archivo de mantener toda su historia antigua, de la mejor Mercurial puede realizar un seguimiento de la misma.

+1

He hecho el 'mv' antes de la fusión, en la nueva rama sin nombre, pero el resultado final es el mismo. –

+0

Eso funcionó bien para mí, con la recomendación de Ry4an de simplemente mover el archivo donde su procedimiento sugiere "". –

7

¿No sería justo (si "hg remove" d src en REV + 1):

hg revert -rREV src 
hg status 
A src 
hg rename src dest 
hg commit -m"restored src and renamed it to dest" 

trabajo?

edited: Acabo de probarlo y parece estar bien. En realidad, no es necesario "hg add" para src, ya que revertir se está ocupando de esto. Sin embargo si sólo uno de comprometerse en lugar de dos (como en el código anterior), hg dará una advertencia:

src no se ha comprometido todavía, así que no hay datos de copia se almacenarán durante dest.

Espero que ayude.

+0

Eso funcionaría para restaurar el archivo; no permite el cambio de nombre simultáneo (ya que el archivo agregado no se considera tener un historial). Sin embargo, con dos compromisos, esto también habría funcionado. –

Cuestiones relacionadas