2016-02-11 17 views
8

Jak dokonać skanowania plików w poszukiwaniu rzeczywistych zmian?Wykonaj głębokie skanowanie git, aby porównać pliki dla rzeczywistych

Obecnie wydaje się polegać na sygnaturach czasowych pliku, dlatego też popełnia błędy: nie pokazuje różnic w miejscu, w którym się znajdują.

Próbowałem git update-index --refresh i git update-index --really-refresh. Oba polecenia kończą się natychmiast i nie wydaje się, aby wykonać skanowanie i binarne porównanie każdego pliku w drzewie.

cytat z another question:

Ustawianie core.trustctime do false sprawia git ignorować fałszywych zmian ctime, który najwyraźniej dzieje się w niektórych systemach plików. Potrzebuję odwrotnego zachowania: ponowne obliczenie skrótu pliku, nawet gdy mtime się nie zmieniło.

+2

http://stackoverflow.com/questions/9321253/how-to-make-git-check-every-files-contents-even-though-stat-info-may-not-have-c –

+1

@Josh Lee : Powinienem przyznać, że pytanie dotyczy tego samego, ale są pewne kwestie, które pozostawiają moje pytanie: 1. To pytanie nie ma jeszcze rozwiązania; 2. Nie znalazłem tego pytania według słów kluczowych. Może być sformułowane tak, aby nikt nie mógł go znaleźć? 3. to pytanie ma 3 lata i ma tylko 129 wyświetleń. – Paul

+0

Chociaż nie ma tam odpowiedzi, pytanie nadal jest duplikatem. Oznaczony jako taki, zostanie znaleziony przez słowa kluczowe. Weź pod uwagę bounty bounty. – Basilevs

Odpowiedz

6

Po pierwsze, powinieneś spróbować znaleźć przyczynę problemu. Używanie informacji statystycznych Gita (nie tylko znacznika czasu, ale także rozmiaru) jest zwykle bardzo wiarygodne. Jeśli masz z nim problem, najprawdopodobniej oznacza to, że masz poważnie uszkodzony system. Git nie będzie jedynym narzędziem, które może zostać złamane (najprawdopodobniej będzie to również system tworzenia kopii zapasowych i system kompilacji).

Można spróbować to (po przeczytaniu ostrzeżenia poniżej):

rm -f .git/index 
git reset HEAD 

Komenda rm będzie oczywiście odrzucić wszelkie informacje w indeksie, to znaczy: wszystko stat informacja, że ​​Git używa wewnętrznie, aby uniknąć porównywania plików (to, czego się spodziewasz) i wszelkie informacje o niezamkniętych plikach, które możesz mieć niezatwierdzone w swoim indeksie. Z drugiej strony nie spowoduje to zmiany żadnych zatwierdzonych informacji. Komenda git reset HEAD utworzy nowy indeks, który pasuje do HEAD, tj. Po tym poleceniu Git uważa, że ​​nie wprowadzono zmian wystawionych w indeksie.

Git przywróci informacje o statach (tj. Powtórzy całe porównanie plików) w czasie git reset HEAD, więc jest to rozwiązanie, które mówi Git "zapomnij o statystykach teraz", aby uruchomić po złamaniu informacji o statystyce, ale nie jest sposobem, aby powiedzieć Git "nigdy więcej nie używać informacji statystycznych".

+0

W tej chwili nie pamiętam, co robiłem, aby osiągnąć wynik. Być może rozpakowałem pliki z archiwum. Ze względu na szczegółowość przyjmuję twoją odpowiedź. – Paul

2

Jedna rzecz, którą możesz zrobić, to zaktualizować znacznik czasu wszystkich plików do bieżącego czasu; możesz to zrobić z find . -exec touch {} \;

+1

Tak, myślałem o tym, ale to tylko obejście, a nie oryginalne rozwiązanie. – Paul