2008-10-26 9 views
5

Używam TortoiseHg 0.5 (która zawiera Mercurial 1.0.2) na Vista64. Moje zrozumienie z Mercurial Book polega na tym, że Mercurial powinien obsługiwać nazwy plików w sposób niewrażliwy na wielkość liter w systemie plików niewrażliwym na wielkość liter (takim jak NTFS, na którym aktualnie się znajduję). Jednak uważam, że moja instalacja Mercurial jest bowiem wrażliwa na sprawy:Obsługa nazw niewrażliwych na wielkość znaków w Mercurial

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

może to być błąd w Mercurial, to błąd w kompilacji TortoiseHg z Mercurial, czy jest to coś innego? W jaki sposób można uzyskać obsługę nazw niewrażliwych na wielkość liter w systemie Mercurial w systemie Windows?

Odpowiedz

10

Ten problem został rozwiązany w Mercurial 1.1! Z wersji release notes: "Poprawiona poprawność w obliczu systemu plików folderów".

W Windows Mercurial teraz ignoruje sprawę w swoich argumentów wiersza poleceń:

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

I to również jest świadoma, że ​​zmiany nazw plików, które tylko wiążą sprawę nie są nowe pliki:

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

Zatem istnieje nie ma już ryzyka przeoczenia zmian z powodu błędnych danych w wierszu poleceń.

Należy jednak pamiętać, że w treści pliku .hgignore jest rozróżniana wielkość liter. Jest to problem, tylko jeśli używasz globalnej składni; ze składnią regexp możesz umieścić (? i) na początku wzorców, aby były niewrażliwe.

7

Myślę, że źle odczytałeś HGbook. Wstęp do sekcji 7.7 opisuje właśnie trzy różne typy wrażliwości na przypadki, które istnieją w systemach operacyjnych, nie mówiąc, że mercurial będzie odzwierciedlał te semantyki.

Później w rozdziale 7.7.2 „Wykrywanie przypadków konfliktów” jest napisane:

Podczas pracy w pracy katalogu Mercurial honoruje nazewnictwa politykę plików gdzie katalog roboczy znajduje. Jeśli system plików zachowuje wielkość liter, ale jest niewrażliwy, oznacza to, że Mercurial będzie traktował nazwy , które różnią się tylko przypadkiem jako takim samym, co .

Kiedy robisz hg status -A FOO proces, który dzieje się w ciągu Mercurial jest:

  1. Sprawdź, czy plik istnieje w systemie plików pasujących argument pliku, „foo”, - i w tym momencie to jest niewrażliwe na wielkość liter, więc znajduje "foo" i mówi "tak, mam plik"
  2. Sprawdź, czy w manifeście pliku znajduje się wpis zgodny z argumentem pliku, "FOO", a nie ma go, więc stan pokazuje "?" mówiąc, że jest to plik na dysku, który hg nie śledzi

Aby lepiej zobaczyć mercurial nie dbając o sprawy na NTFS wykonaj następujące kroki:

  1. Hg startowych
  2. echo linia> Foo
  3. hg dodać foo
  4. hg commit -m 'popełnione foo'
  5. ruch nie-foo foo
  6. ruch nie-foo fOO
  7. stan hg

i powinieneś zobaczyć Hg mówiąc, że nic się nie zmieniło, bo jedyne, co się zmieniło, to sprawa, która ignoruje Hg dla Ciebie.

Kiedy zrobić to samo na linux I zamiast zobaczyć:

! Foo 
? FOO 
Powiązane problemy