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.
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
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 ...) –
Đố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). –