2011-03-24 18 views
18

Si lo hace hg log myfile -v que ver una lista de conjuntos de cambios que el archivo fue modificado en.Mercurial: determine dónde se eliminó el archivo.

En nuestro caso, en el más reciente conjunto de cambios, el archivo se elimina. Pero no puede decir esto mirando la salida verbosa (-v) de hg log. ¿Hay algún comando sencillo de Mercurial que pueda usar para determinar si un archivo se ha eliminado del repositorio y cuándo?


actualización: Tenga en cuenta que se trata de un cliente de Windows, y estamos utilizando v Mercurial 1.4.3

Actualización 2: Aparece a continuación las respuestas trabajaría con una versión más reciente de Mercurial, sin embargo, una actualización no está en juego en este momento. ¿Alguna otra idea para v 1.4.3 ???

Respuesta

22

Puede comprobar qué revisión se eliminó un archivo (cualquier muchas otras características interesantes) utilizando revsets:

hg log -r 'removes(<myfile>)'

Algunos ejemplos:

hg log -r 'removes(build.xml)' // donde build.xml solía ser en el directorio actual

hg log -r 'removes("**/build.xml")' // donde build.xml puede haber estado en los subdirectorios

Ver hg help revsets para más detalles.

+0

no parece funcionar para mí: 'abortar: revisión desconocida 'elimina (mi archivo) '! ' –

+1

@Marcus: los cambios se introdujeron en Mercurial v1.7. Parece que estás usando una versión anterior. –

+0

Parece que también requiere una ruta de repositorio completa (es decir, "myfile" o "./myfile" no funcionarán si está en un subdirectorio) – Nick

3

Esto es lo que yo uso para listar todos los archivos borrados en mi repositorio:

hg log --template "{rev}: {file_dels}\n" | grep -v ':\s*$' 
+1

En cuanto a grep, debería haber notado que estoy en Windows. Traté de quitar la parte después de la tubería, pero no parece ser información útil (al menos sin grep). –

+0

¿Existe un comando findstr equivalente que podamos ejecutar en Windows sin grep? – WEFX

+0

@WEFX Lo mejor que puedo imaginar para un equivalente de 'FINDSTR' es' | FINDSTR/R/V ": * $" ', pero FINDSTR genera una gran cantidad de mensajes como' FINDSTR: la línea 29 es demasiado larga', por lo que ignorará cualquier gran compromiso con ella. – binki

16

La bandera --removed debe conseguir lo que busca:

hg log myfile -v --removed 

De la ayuda de hg log :

--removed    include revisions where files were removed 
+0

Tenga en cuenta que simplemente 'hg log myfile' listará todas las revisiones en las que se modificó el archivo, incluido el lugar donde se eliminó (creo). Pero solo quiero saber dónde se eliminó, no dónde se modificó. –

+0

La solución de revólveres es probablemente la mejor opción. Podría valer la pena actualizar su versión Mercurial más allá de 1.7 para obtener esa característica. – Den

+2

Los cambios en los que se elimina el archivo * no * están incluidos de manera predeterminada por motivos de rendimiento (en v2.1 como mínimo). – Nick

Cuestiones relacionadas