2008-10-26 24 views
5

Tôi đang sử dụng TortoiseHg 0.5 (bao gồm Mercurial 1.0.2) trên Vista64. Sự hiểu biết của tôi từ Mercurial Book là Mercurial nên xử lý tên tệp theo cách phân biệt chữ hoa chữ thường trên hệ thống tệp không phân biệt chữ hoa chữ thường (chẳng hạn như NTFS, đó là những gì tôi đang sử dụng). Tuy nhiên tôi thấy rằng cài đặt của tôi về Mercurial là trong thực tế nhạy cảm với trường hợp:Xử lý tên tệp không phân biệt chữ hoa chữ thường trong Mercurial

>hg status -A foo 
C foo 
>hg status -A FOO 
? FOO 

Phải chăng đây là một lỗi trong Mercurial, một lỗi trong xây dựng TortoiseHg của Mercurial, hoặc là nó cái gì khác? Làm thế nào tôi có thể đạt được xử lý tên tập tin không phân biệt dạng chữ từ Mercurial trên Windows?

Trả lời

10

Vấn đề này đã được giải quyết trong Mercurial 1.1! Từ release notes: "Cải thiện tính chính xác khi đối mặt với hệ thống tệp xếp chồng".

Trên Windows, Mercurial nay bỏ qua trường hợp trong đối số dòng lệnh của nó:

>hg status -A foo 
C foo 
>hg status -A FOO 
C foo 

Và nó cũng là nhận thức được rằng những thay đổi tên tập tin mà chỉ liên quan đến trường hợp không phải là tệp mới:

>ren foo FOO 
>hg status -A fOO 
C foo 

Như vậy có không còn bất kỳ nguy cơ nào khi nhìn thấy những thay đổi do các mistypes trên dòng lệnh.

Tuy nhiên, hãy lưu ý rằng nội dung của tệp .hgignore vẫn phân biệt chữ hoa chữ thường. Đây chỉ là vấn đề nếu bạn đang sử dụng cú pháp glob; với cú pháp regexp bạn có thể đặt (? i) ở đầu các mẫu để làm cho chúng không nhạy cảm.

7

Tôi nghĩ bạn đã hiểu sai về hgbook. Phần giới thiệu cho phần 7.7 chỉ mô tả ba loại khác biệt của độ nhạy trường hợp tồn tại trong các hệ điều hành, không nói rằng thủy ngân sẽ phản chiếu các ngữ nghĩa đó.

Sau đó trong phần 7.7.2 'Phát hiện trường hợp xung đột' nó nói:

Khi vận hành trong thư mục làm việc, Mercurial tôn vinh chính sách đặt tên của hệ thống tập tin nơi thư mục làm việc tọa lạc. Nếu hệ thống tệp bảo vệ trường hợp, nhưng không nhạy cảm, Mercurial sẽ xử lý các tên chỉ khác nhau trong trường hợp là giống nhau.

Khi bạn làm hg status -A FOO quá trình đó đang xảy ra trong vòng lanh lợi là:

  1. Kiểm tra xem một tập tin tồn tại trên hệ thống tập tin phù hợp với đối số tập tin, 'foo', - và vào thời điểm này nó là trường hợp không nhạy cảm để tìm 'foo' và nói "yup, tôi có một tệp"
  2. Kiểm tra xem có mục nhập nào trong tệp kê khai khớp với đối số tệp, 'FOO' và không, vì vậy trạng thái hiển thị một '?' nói rằng nó là một tập tin trên đĩa đó hg không được theo dõi

Để xem tốt hơn lanh lợi không quan tâm đến trường hợp trên NTFS thử các bước sau:

  1. hg init
  2. dòng echo> Foo
  3. hg thêm foo
  4. hg commit -m 'cam foo'
  5. di chuyển foo không-foo
  6. di chuyển không-foo fOO
  7. tình trạng hg

và bạn sẽ thấy hg nói rằng không có gì đã thay đổi vì điều duy nhất mà đã thay đổi là trường hợp mà hg được bỏ qua cho bạn.

Khi tôi làm điều tương tự trên linux tôi thay vì xem:

! Foo 
? FOO 
Các vấn đề liên quan