2012-04-23 29 views
5

Sau khi di chuyển tệp vào thư mục khác, tôi không thể hiển thị sự khác biệt giữa hai bản sửa đổi nữa. Ví dụ .:Khác biệt về Mercurial không hoạt động sau khi di chuyển/đổi tên

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 

Kết quả trong:

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 

đó là những gì tôi mong đợi. Tuy nhiên, khi tôi chuyển tệp "a" vào thư mục "b":

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

kết quả này thành không có gì (không có đầu ra). Tôi cũng cố gắng sử dụng git Giff algo:

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

Một lần nữa, không có đầu ra ở tất cả. Nhật ký là có vẻ là OK:

hg log --follow a 

Kết quả trong:

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 

Có ai đó bất kỳ ý tưởng tại sao diff không hoạt động sau khi di chuyển một tập tin? Giúp đỡ của bạn được đánh giá rất cao.

+0

BTW: Tôi đang sử dụng Mercurial 2.2-rc – meisterplanlos

+0

Tôi đã chỉnh sửa câu hỏi một chút: Mercurial không theo dõi thư mục, vì vậy 'hg add b' không làm gì cả khi' b' là một thư mục trống. –

+0

@Martin: Cảm ơn. – meisterplanlos

Trả lời

3

Điều này thật khó hoặc không thể với Mercurial ngày nay. Tôi nghĩ rằng gần nhất bạn có thể nhận được là

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

nơi Mercurial sẽ theo dõi các bản sao ngược (--follow) trước khi hiển thị các diff (--patch).

Nói chung, Mercurial không theo dõi định danh tệp, chỉ theo dõi tên tệp. Khi bạn tra cứu thông tin bằng số sửa đổi, Mercurial đầu tiên sẽ tra cứu bản sửa đổi và sau đó tra cứu bất kỳ tên tệp nào trong bản sửa đổi đó. Vì vậy, hg cat -r 0 a sẽ cho bạn kết quả tương tự như

hg update -r 0 
cat a 

tức là kết quả độc lập với phụ huynh làm việc trong thư mục hiện tại.

+0

Cảm ơn một lần nữa, Martin. Điều này giải thích hành vi. Các công việc xung quanh thông qua log --patch là tốt đẹp cho giao diện điều khiển.Nếu tôi có thời gian, tôi sẽ xem xét MercurialEclipse và xem liệu có khả năng hack trong công việc này hay không. – meisterplanlos

0

Tôi nghĩ rằng đó là vì b/a không tồn tại trong bản sửa đổi 1 hoặc sửa đổi 0. Nếu bạn thực hiện lệnh hg diff -r 0 -r 4 từ trong thư mục b, nó sẽ tạo ra kết quả mong đợi.

Nếu bạn thực hiện hg diff -r 0 -r 1 a từ gốc của bản sao làm việc, nó cũng sẽ hiển thị kết quả mong đợi.

+0

Phải. Điều này không chỉ có vẻ hợp lý mà còn có vẻ trả lời câu hỏi của tôi. Thật không may, nó không giải quyết được vấn đề của tôi. Sau khi chuyển đổi từ CVS sang Mercurial, có một thư mục chứa một tập tin cần được thay thế trong thư mục gốc. Bây giờ tôi không thể di chuyển chúng vào thư mục gốc mà không mất một lịch sử truy cập trực tiếp (thông qua MecurialEclipse). I E. Tôi muốn truy cập các khác biệt sửa đổi trong Eclipse thông qua "Nhấp chuột phải" -> Nhóm -> Lịch sử -> "Chọn hai bản sửa đổi" -> "Nhấp chuột phải" -> "So sánh với nhau". – meisterplanlos