2013-10-03 12 views
8

Moje pytanie brzmi: co może powodować, że Mercurial wskaże (poprzez "status" lub TortoiseHgWorkbench) pliki jako "zmodyfikowane", gdy pozostaną niezmienione?hg pokazuje zmodyfikowane pliki, które są niezmienione, dlaczego tak się dzieje?

Oto sytuacja: mam repozytorium lokalne na komputerze z systemem Linux. Pracuję tylko z repozytorium na komputerze z systemem Linux. Mam jednak dokładną kopię repozytorium (i pliku roboczego) na komputerze z systemem Windows (synchronizuję za pomocą napędu flash, używając BeyondCompare). Według mojego najlepszego wspomnienia, nigdy nie wywołuję rtęci na komputerze z Windows, chociaż jest tam zainstalowany.

Niedawno chciałem zrobić zatwierdzenie na komputerze z systemem Linux, a wiele plików, których się nie spodziewałem, zostało wymienionych jako "Zmodyfikowane". Zrobiłem wizualne diff (używając BeyondCompare), który wskazuje, że kopia katalogu roboczego jest "binarnie identyczna" z rodzicem w repozytorium. TortoiseHgWorkbench pokazuje plik "zmodyfikowany", a okno różnic pokazuje cały plik, na zielono (tak jakby repozytorium miało pusty plik, tak myślę). W danym pliku data pliku w systemie plików ma kilka miesięcy, natomiast moje ostatnie zatwierdzenie (zatwierdzam wszystkie zmienione pliki) było kilka tygodni temu. Niektóre niezmienione pliki są wyświetlane jako "zmodyfikowane", ale niektóre nie. Nigdy wcześniej nie widziałem tego zachowania, więc jestem nieco zdezorientowany.

Uruchomiłem "hg verify" na repozytorium i nie zanotowałem niczego interesującego.

Domyślam się, że to nie jest wielka sprawa, ponieważ wszystkie pliki w katalogu roboczym są nienaruszone, a gdybym miał zatwierdzić pliki (nawet jeśli są one niezmienione), nie jestem pewien, czy coś mogłoby być zranione. Ale bardzo chciałbym zrozumieć, co się stało.

Z góry dziękuję za wszelkie pomysły, na co należy zwrócić uwagę.

[EDIT]

Jeszcze nie znalazłem przyczynę (uprawnienia do plików i datę dostępu bez zmian), ale odpowiedź @ barjak wskazał mnie w kierunku, gdzie znalazłem to: Why does "hg status" show changed files when "hg diff -g" doesn't? (One parent). Moja sytuacja jest taka sama jak tam opisana (zarówno hg diff, jak i hg diff - pokazują tylko pliki, które naprawdę się zmieniły, podczas gdy status hg pokazuje kilka niezmienionych plików). BTW używam Hg 2.6.

[EDIT]

Jeśli jest pomocny każdemu, tutaj jest jak wróciłem do normalnego repozytorium:

w powłoce:

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

w tortoiseHgWorkbench

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

w powłoce:

hg revert --all 

następnie wyczyść katalog roboczy (przywróć - wszystkie wygenerowały niektóre nieistniejące pliki. Zresetuj także niektóre daty plików (jestem jedyną osobą używającą tego repozytorium, a daty plików są dla mnie przydatne.) Tak, istnieje rozszerzenie Hg do przywracania dat plików, ale jeszcze go nie zainstalowałem).

Ten proces przywrócił mi równowagę.

+0

W BC3, w sekcji Sesja-> Ustawienia sesji, na karcie Porównanie jest ustawiona na "Porównanie binarne" lub "Oparte na regułach". Jakiego rodzaju pliki porównujesz? – Edward

+0

Porównanie jest ustawione na "Reguły oparte". Plik jest plikiem źródłowym C++. Wynik BC3 "binary same" jest rzeczywiście poprawny. Teraz przyjrzę się opcji "uprawnień", jak sugeruje @barjak. (pierwsza kontrola wygląda na to, że uprawnienia się nie zmieniły, ale wykopię się jeszcze dalej ...) –

+0

Dla mnie tak się stanie, jeśli będę musiał korzystać z okien Microsoftu. Jeśli użyję go do zatwierdzenia, to jeśli kiedykolwiek zaktualizuję tę wersję, to pliki zostaną wyświetlone nam zmienione. (Może okna MS zapisują coś w repozytorium, które nie jest/lub nie może być reprezentowane przez Uniks). –

Odpowiedz

10

Plik można oznaczyć jako zmodyfikowany po zmianie uprawnień Uniksa. Wypróbuj hg diff -g, aby sprawdzić uprawnienia.

+2

Nadal nie znam podstawowej przyczyny tego problemu (jeśli ktoś ma jakieś dodatkowe pomysły, nadal jestem zainteresowany), ale ta odpowiedź wskazała mi przydatny kierunek. –

+0

Gdyby ten sam problem i użycie opcji -g pokazało mi, że uprawnienia zostały zmienione dla pliku. – Alex

2

Po prostu powrót nie pomógł mi.Pliki pozostaną w stanie Zmodyfikowanym, mimo że je popełniłem. Jeśli spróbuję ponownie to zrobić. Po prostu usunąłem pliki, które pojawiły się jako zmodyfikowane (w razie potrzeby wykonaj kopię zapasową), które spowodowały pojawienie się wszystkich plików! obok niego, gdy wpadłem

hg st 

Potem prowadził następujące polecenie, aby przywrócić pliki (które zostały już sprawdzone w):

hg revert --all --no-backup 

i że problem został rozwiązany

Powiązane problemy