2009-12-18 14 views
8

Hasta hace poco hemos estado utilizando SVN para todos los proyectos de nuestro estudio web, y hay una característica muy conveniente presente en varios clientes como Subversive y TortoiseSVN que pueden extraer todos los archivos que se han cambiado en una revisión determinada.¿Cómo puedo extraer todos los archivos modificados de un conjunto de cambios en Mercurial?

¿Hay alguna manera de hacerlo en Mercurial? No me importa si se hace a través de una GUI o una línea de comando, es muy conveniente tener un conjunto de archivos que se han cambiado en un determinado conjunto de cambios.

P.S. Debo haberlo equivocado la primera vez. Necesito más que solo una lista de archivos, sería genial tener todos los archivos exportados a alguna otra carpeta.

+0

¿Se refiere al nombre de archivo o contenido o diferencia de los archivos? –

Respuesta

11

Sobre la base de la respuesta de Jerome esto le ayudará a los copias de los archivos que cambiaron en la revisión 4:

hg archive --type files --rev 4 -I $(hg log -r 4 --template {files} | sed 's//-I /g') ~/changedfiles 

que pone todos los archivos que han cambiado en la revisión de cuatro en un directorio recién creado changedfiles nombrados en tu hogar.

Si lo cambia a:

hg archive --type zip --rev 4 -I $(hg log -r 4 --template {files} | sed 's//-I /g') ~/changedfiles.zip 

entonces aparecer en un archivo zip.

Vale la pena señalar que eso solo funciona si no tiene espacios en los nombres de archivo. Si cometiste ese error, entonces necesitaremos usar hg status --print0 -r revision -r parent-of-revision, pero espero que eso no sea necesario.

Tenga en cuenta también que el número de revisión, '4' en nuestro ejemplo, aparece dos veces.Todo el asunto podría envolverse fácilmente en un script de shell, y eso se parametrizaría para que no tenga que recordar cambiarlo en ambos lugares.

0

el comando presenta los nombres de todos los archivos modificados en una revisión especificada:

hg export revision_num | grep ^diff | cut -f 6 -d ' ' 
+0

¡Eso es casi lo que necesito! Solo necesito de alguna manera canalizar el resultado a cp y copiar todos los archivos en una carpeta separada. ¡Gracias! –

1

Dependiendo de su nido, hay dos comandos:

  1. para conseguir los cambios asociados con una revisión en particular , puede utilizar hg export:

    hg export -r 23 
    

Esto generará un diff de todos los cambios (en realidad un parche con formato, lista para ser aplicada)

  1. Para obtener el nombre de todos los archivos que fueron afectados, se puede utilice hg log:

    hg log -r 23 -v 
    

Esto imprimirá el meta-información para la revisión, junto con los nombres de los archivos que se vieron afectados.

+0

también podría, por supuesto, hg diff -r rev -r rev-1 que sería lo mismo que la parte diff de exportación –

+1

@jk, 'hg export' es mejor que' hg diff', ya que elimina el paso de encontrar el conjunto de cambios principal, que no siempre es decreciente (por ejemplo, las numeraciones se confunden con fusiones y cosas por el estilo). – notnoop

+2

@notnoop, puedes usar 'hg diff -c' para eso :) – tonfa

7

Esto le da la lista de los archivos modificados en la revisión 4:

hg log -r 4 --template {files} 

Actualización: Si le gustaría tener un archivo por línea, es posible utilizar the style described in Hg book.

Cuestiones relacionadas