2012-04-23 11 views
5

Po przeniesieniu pliku do innego katalogu nie mogę już wyświetlać różnic między dwiema wersjami. Np .:Mercurial diff nie działa po przeniesieniu/zmianie nazwy

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 

Wyniki w:

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 

co jest, czego się spodziewałem. Jednak kiedy teraz przenieść plik „a” do katalogu „B”:

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

Prowadzi to do niczego (bez wyjścia w ogóle). Próbowałem również użyć gify Giff algo:

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

Znowu nie ma żadnego wyjścia. IS log wydaje się być OK:

hg log --follow a 

Wyniki w:

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 

Ma ktoś jakiś pomysł dlaczego diff nie działa po przeniesieniu pliku? Twoja pomoc jest bardzo doceniana.

+0

BTW: Używam Mercurial 2.2-rc – meisterplanlos

+0

Edytowałem nieco pytanie: Mercurial nie śledzi katalogów, więc 'hg add b' nie robi nic, gdy' b' jest pustym katalogiem. –

+0

@Martin: Dzięki. – meisterplanlos

Odpowiedz

3

To jest trudne lub niemożliwe z dzisiejszym Mercurial. Myślę najbliżej można uzyskać jest

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

gdzie Mercurial będzie śledzić kopie tyłu (--follow) przed pokazaniem diff (--patch).

Ogólnie Mercurial nie zapisuje plików tożsamości, to tylko tory nazwy plików. Podczas wyszukiwania informacji według numeru wersji, Mercurial najpierw sprawdza wersję, a następnie sprawdza nazwy plików w tej wersji. Więc hg cat -r 0 a daje taki sam wynik jak

hg update -r 0 
cat a 

to znaczy, wynik jest niezależny od bieżącego katalogu roboczego rodzica.

+0

Jeszcze raz dziękuję, Martin. To wyjaśnia zachowanie. Praca przy pomocy log -patch jest przyjemna dla konsoli.Jeśli będę miał czas, zajrzę do MercurialEclipse i zobaczę, czy istnieje możliwość włamania się do tej pracy. – meisterplanlos

0

Myślę, że to dlatego, że b/a nie istnieje w wersji 1 lub wersji 0. Jeśli wykonasz polecenie hg diff -r 0 -r 4 z poziomu folderu b, powinno ono wygenerować oczekiwane wyjście.

Jeśli wykonasz hg diff -r 0 -r 1 a z katalogu głównego kopii roboczej, powinien również pokazać oczekiwany wynik.

+0

Dobrze. To nie tylko brzmi rozsądnie, ale wydaje się również odpowiadać na moje pytanie. Niestety to nie rozwiązuje mojego problemu. Po konwersji z CVS na Mercurial istnieje katalog zawierający kilka plików, które powinny znajdować się raczej w folderze głównym. Teraz nie mogę przenieść ich do głównego folderu bez utraty bezpośrednio dostępnej historii (przez MecurialEclipse). To znaczy. Chcę uzyskać dostęp do różnic w wersji Eclipse za pomocą "Kliknij prawym przyciskiem myszy" -> Zespół -> Historia -> "Wybierz dwie wersje" -> "Kliknij prawym przyciskiem myszy" -> "Porównaj ze sobą". – meisterplanlos