2012-04-23 2 views
5

После перемещения файла в другой каталог я больше не могу отображать различия между двумя версиями. Например .:Mercurial diff не работает после перемещения/переименования

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 

Результаты в:

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 

, который я ожидал. Однако, когда я теперь переместить файл «а» в каталог «Ъ»:

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

это приводит в ничто (не выходной вообще). Я также попытался использовать git Giff algo:

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

Опять же, выхода нет. Журнал, кажется ОК:

hg log --follow a 

Результаты в:

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 

Имеет кто-либо идеи, почему разница не работает после перемещения файла? Ваша помощь очень ценится.

+0

BTW: Я использую Mercurial 2.2-rc – meisterplanlos

+0

Я слегка отредактировал вопрос: Mercurial не отслеживает каталоги, поэтому 'hg add b' ничего не делает, когда' b' - пустой каталог. –

+0

@Martin: Спасибо. – meisterplanlos

ответ

3

Это сложно или невозможно с сегодняшним Mercurial. Я думаю, что ближе вы можете получить

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

где Mercurial будет отслеживать копии в обратном направлении (--follow) перед показом различия (--patch).

В общем, Mercurial не отслеживает файлов идентичностей, он отслеживает только имена файлов. Когда вы просматриваете информацию по номеру версии, Mercurial сначала ищет ревизию, а затем ищет любые имена файлов в этой ревизии. Так hg cat -r 0 a даст вам тот же результат, как

hg update -r 0 
cat a 

т.е., результат не зависит от текущего родителя рабочего каталога.

+0

Еще раз спасибо, Мартин. Это объясняет поведение. Работа вокруг с помощью log -patch приятна для консоли.Если у меня будет время, я загляну в MercurialEclipse и посмотрю, есть ли возможность взломать эту работу. – meisterplanlos

0

Я думаю, что это потому, что b/a не существует в ревизии 1 или версии 0. Если вы выполните команду hg diff -r 0 -r 4 из папки b, она должна произвести ожидаемый вывод.

Если вы выполните hg diff -r 0 -r 1 a из корня рабочей копии, он также должен показать ожидаемый результат.

+0

Право. Это не только разумно, но и, похоже, отвечает на мой вопрос. К сожалению, это не решает мою проблему. После преобразования из CVS в Mercurial существует каталог, содержащий кучу файлов, которые должны быть скорее в корневой папке. Теперь я не могу переместить их в корневую папку, не теряя доступную историю (через MecurialEclipse). То есть Я хочу получить доступ к изменениям в Eclipse с помощью «Правого клика» -> Команда -> История -> «Выбрать две версии» -> «Правый клик» -> «Сравнить друг с другом». – meisterplanlos