2013-10-03 18 views
8

Câu hỏi của tôi là: điều gì có thể khiến Mercurial biểu thị (thông qua "trạng thái" hoặc TortoiseHgWorkbench) tệp là "Đã sửa đổi" khi chúng không thay đổi?hg hiển thị các tệp được sửa đổi không thay đổi, tại sao có thể là?

Đây là tình huống: Tôi có kho lưu trữ cục bộ với máy Linux. Tôi chỉ làm việc với kho lưu trữ trên máy Linux. Tuy nhiên, tôi có một bản sao chính xác của kho lưu trữ (và tệp làm việc) trên máy Windows (tôi đồng bộ hóa thông qua một ổ đĩa flash, sử dụng BeyondCompare). Để hồi tưởng tốt nhất của tôi, tôi không bao giờ gọi mercurial trên máy Windows, mặc dù nó được cài đặt ở đó.

Gần đây tôi đã muốn thực hiện cam kết trên máy Linux và nhiều tệp mà tôi không mong đợi hiển thị được liệt kê là "Đã sửa đổi". Tôi đã làm một hình ảnh khác biệt (sử dụng BeyondCompare) mà chỉ ra rằng bản sao thư mục làm việc là "nhị phân giống hệt nhau" để cha mẹ trong kho. TortoiseHgWorkbench hiển thị tệp "đã sửa đổi" và cửa sổ khác biệt hiển thị toàn bộ tệp, màu xanh lá cây, (như thể kho lưu trữ có tệp trống, tôi đoán). Trên tệp được đề cập, ngày tệp trên hệ thống tệp là tháng cũ, trong khi lần commit cuối cùng của tôi (tôi cam kết tất cả các tệp đã thay đổi) là một vài tuần trước. Một số tệp không thay đổi hiển thị là "đã sửa đổi", nhưng một số tệp thì không. Tôi chưa từng thấy hành vi này trước đây, nên tôi hơi bối rối.

Tôi chạy "hg verify" trên kho lưu trữ và nó không lưu ý bất kỳ điều gì thú vị.

Tôi đoán đó không phải là vấn đề lớn vì tất cả các tệp trong thư mục làm việc vẫn còn nguyên vẹn và nếu tôi cam kết tệp (mặc dù chúng không thay đổi), tôi không chắc chắn bất cứ điều gì sẽ bị tổn thương. Nhưng tôi rất muốn hiểu điều gì đã xảy ra.

Cảm ơn trước cho bất kỳ ý tưởng nào cần tìm.

[EDIT]

Vẫn chưa tìm thấy một nguyên nhân gốc rễ (cho phép file và ngày truy cập không thay đổi) nhưng phản ứng @ barjak của chỉ cho tôi theo hướng nơi tôi tìm thấy này: Why does "hg status" show changed files when "hg diff -g" doesn't? (One parent). Tình trạng của tôi cũng giống như mô tả ở đó (cả hg diff và hg diff --git chỉ hiển thị các tệp thực sự đã thay đổi, trong khi trạng thái hg hiển thị một vài tệp không thay đổi). BTW Tôi đang sử dụng Hg 2.6.

[EDIT]

Nếu nó là hữu ích cho bất cứ ai, ở đây là làm thế nào tôi đã trở lại với một kho lưu trữ thông thường:

trong một vỏ:

cd src 
hg diff --git > ../junk 
grep "\-\-git" ../junk 

trong tortoiseHgWorkbench

uncheck all files marked "M" 
check all files indicated in the grep results above (i.e., have real diffs) 
commit 

trong vỏ:

hg revert --all 

sau đó dọn sạch thư mục hoạt động (hoàn nguyên - tất cả đã tạo một số tệp không tồn tại. Cũng đặt lại một số ngày tập tin (tôi là người duy nhất sử dụng kho lưu trữ này và ngày tháng tập tin là hữu ích cho tôi. Có có một phần mở rộng Hg để khôi phục lại ngày tập tin nhưng tôi chưa cài đặt nó).

Quá trình này giúp tôi xếp hàng lại.

+0

Trong BC3, trong Phiên-> Cài đặt phiên, trên tab So sánh được đặt thành "So sánh nhị phân" hoặc "Quy tắc dựa trên". Bạn đang so sánh loại tệp nào? – Edward

+0

So sánh được đặt thành "Quy tắc Dựa trên". Tệp này là tệp nguồn C++. Kết quả BC3 của "nhị phân giống nhau" thực sự là chính xác. Bây giờ tôi sẽ xem xét khả năng "quyền" như @barjak gợi ý. (kiểm tra đầu tiên trông giống như các điều khoản đã không thay đổi nhưng tôi sẽ đào sâu hơn một chút ...) –

+0

Đối với tôi điều này xảy ra nếu tôi phải sử dụng các cửa sổ của Microsoft. Nếu tôi sử dụng nó để cam kết, sau đó nếu tôi đã từng cập nhật bản sửa đổi này, thì các tệp được hiển thị cho chúng tôi đã thay đổi. (Có thể cửa sổ MS đang lưu thứ gì đó vào repo, đó không phải là/hoặc không thể được đại diện bởi Unix). –

Trả lời

10

Một tệp có thể được đánh dấu là đã sửa đổi khi quyền Unix cũng được thay đổi. Hãy thử hg diff -g để kiểm tra các quyền.

+2

Tôi vẫn không biết nguyên nhân gốc rễ của vấn đề này (nếu có ai có thêm ý tưởng, tôi vẫn quan tâm), nhưng câu trả lời này chỉ cho tôi một hướng hữu ích. –

+0

Có cùng sự cố và sử dụng tùy chọn -g cho tôi thấy rằng các quyền đã thay đổi đối với tệp. – Alex

2

Chỉ cần thực hiện hoàn nguyên đã không giúp tôi.Các tệp sẽ vẫn ở trạng thái Đã sửa đổi mặc dù tôi đã cam kết chúng. Nếu tôi cố gắng cam kết lại. Vì vậy, tôi chỉ xóa các tập tin xuất hiện dưới dạng sửa đổi (tạo bản sao lưu nếu cần thiết) khiến tất cả các tệp hiển thị với một! bên cạnh nó khi tôi chạy

hg st 

Sau đó tôi chạy lệnh sau để phục hồi các tập tin (mà đã được kiểm tra trong):

hg revert --all --no-backup 

và cố định các vấn đề

Các vấn đề liên quan