2012-04-23 15 views
5

Después de mover un archivo a otro directorio ya no puedo mostrar las diferencias entre dos revisiones. Ej .:Mercurial diff no funciona después de mover/cambiar el nombre

hg init 

touch a 
hg add a 
hg ci -m "Added a" 

echo "Bli" >> a 
hg ci -m "Bli" 
echo "Bla" >> a 
hg ci -m "Bla" 
echo "Blub" >> a 
hg ci -m "Blub" 

hg diff -r 0 -r 1 a 

Resultados: en

diff -r 8603b08f5a64 -r 16675581549e a 
--- a/a Mon Apr 23 09:03:25 2012 +0000 
+++ b/a Mon Apr 23 09:03:25 2012 +0000 
@@ -0,0 +1,1 @@ 
+Bli 

que es lo que esperaba. Sin embargo, cuando me muevo ahora el archivo "a" en un directorio "b":

mkdir b 
hg mv a b/a 
hg ci -m "Moved a into b" 
cd b 
hg diff -r 0 -r 1 a 

esto se traduce en la nada (ninguna salida en absoluto). También traté de usar el git Giff algo:

hg diff --git -r 0 -r 1 a 

Nuevamente, no hay salida en absoluto. El registro es parece estar bien:

hg log --follow a 

Resultados en:

changeset: 4:cb8185829bfd 
tag:   tip 
user:  XXXXXXXXXXXXXXXXXXXXXXXXXXXX 
date:  Mon Apr 23 09:08:12 2012 +0000 
summary:  Moved a into b 

changeset: 3:4d1ba89885c3 
user:  XXXXXXXXXXXXXXXXXXXXXXXXXXXX 
date:  Mon Apr 23 09:03:26 2012 +0000 
summary:  Blub 

changeset: 2:e9126dbb50b2 
user:  XXXXXXXXXXXXXXXXXXXXXXXXXXXX 
date:  Mon Apr 23 09:03:26 2012 +0000 
summary:  Bla 

changeset: 1:16675581549e 
user:  XXXXXXXXXXXXXXXXXXXXXXXXXXXX 
date:  Mon Apr 23 09:03:25 2012 +0000 
summary:  Bli 

changeset: 0:8603b08f5a64 
user:  XXXXXXXXXXXXXXXXXXXXXXXXXXXX 
date:  Mon Apr 23 09:03:25 2012 +0000 
summary:  Added a 

tiene a alguien alguna idea de por qué el diff no está funcionando después de mover un archivo? Tu ayuda es muy apreciada.

+0

BTW: Estoy usando Mercurial 2.2-rc – meisterplanlos

+0

He editado la pregunta ligeramente: Mercurial no rastrea directorios, por lo que 'hg add b' no hace nada cuando' b' es un directorio vacío. –

+0

@Martin: Gracias. – meisterplanlos

Respuesta

3

Esto es difícil o imposible con Mercurial de hoy. Creo que lo más cerca que se puede conseguir es

hg log --follow --patch -r 1 a 

donde Mercurial hará un seguimiento de las copias hacia atrás (--follow) antes de mostrar el diff (--patch).

En general, Mercurial no hace un seguimiento identidades de archivos, que solamente lleva nombres de archivo. Cuando busca información por número de revisión, Mercurial buscará primero la revisión y luego buscará cualquier nombre de archivo en esa revisión. Así hg cat -r 0 a le dará el mismo resultado que

hg update -r 0 
cat a 

es decir, el resultado es independiente de la corriente padres directorio de trabajo.

+0

Gracias de nuevo, Martin. Esto explica el comportamiento. El trabajo a través de log --patch es bueno para la consola.Si tengo tiempo, investigaré MercurialEclipse y veré si existe la posibilidad de hackear este trabajo. – meisterplanlos

0

creo que es porque b/a no existe en la revisión 1 o revisión 0. Si se ejecuta el comando hg diff -r 0 -r 4 desde el interior de la carpeta b debe producir el resultado esperado.

Si ejecuta hg diff -r 0 -r 1 a desde la raíz de la copia de trabajo, también debe mostrar el resultado esperado.

+0

Derecha. Esto no solo suena razonable sino que también parece responder mi pregunta. Lamentablemente, no resuelve mi problema. Después de convertir de CVS a Mercurial, hay un directorio que contiene un grupo de archivos que debería estar más bien en la carpeta raíz. Ahora no puedo moverlos a la carpeta raíz sin perder un historial directamente accesible (a través de MecurialEclipse). Es decir. Deseo acceder a las diferencias de revisión en Eclipse mediante "clic derecho" -> equipo -> historial -> "seleccionar dos revisiones" -> "clic derecho" -> "comparar entre sí". – meisterplanlos

Cuestiones relacionadas