Если вы изменяете ранее чистый файл, git замечает. Это происходит даже в том случае, если вы вернули измененные данные этого файла обратно, какими они были ранее. Однако git не читает данные всех отслеживаемых файлов в рабочем каталоге. Это не может быть сделано, потому что это было бы слишком быстро. У меня есть много репозиториев размером в ГБ, а git status
очень быстрое, способ быстро прочитать все данные в репо.
- Как мерзавец делает это?
- Как можно заставить git проверять содержимое каждого отслеживаемого файла, чтобы убедиться, что он не был поврежден с момента последней фиксации? Желательно не проверять содержимое репо в другом месте и не спрашивать у инструмента diff о возможных различиях в рабочих каталогах.
Чтобы лучше понять, что не может происходить (исключая несколько вариантов), я провел этот эксперимент: я создал файловую систему внутри файла и скопировал туда хранилище документов (3 ГБ отслеживаемых файлов). Затем я размонтировал его, открыл файл, в котором хранится файловая система, в шестнадцатеричном редакторе, произвел поиск слова "независимо" и заменил его на слово "безжалостный" (равное количество места на диске необходимо не испортите макет).
Затем я снова смонтировал файловую систему и, конечно же, git не заметил, что что-то изменилось. Я убедился, что файл, в который я внес изменение, отслеживается, открыв его и выполнив поиск по слову "безжалостный". На самом деле, когда я впервые поменял слово в файле резервной копии (*~
file), я не отслеживаю его. Но во второй раз изменения произошли в отслеживаемом файле.
Даже после того, как я просмотрел файл (поэтому его отметка времени доступа изменилась), git не заметил изменений. Если бы это было искажением, потому что космический луч ударил меня по жесткому диску и заменил слово "независимо" в этом случае на слово "безжалостный", как бы я заставил git заметить это для меня?