2016-02-11 10 views
8

Как сделать msysgit для сканирования файлов для реальных изменений?Выполните git глубокое сканирование, чтобы сравнить файлы для реального

В настоящее время, похоже, он полагается на временные метки файлов, и поэтому он допускает ошибки: нет различий там, где есть.

Я пробовал git update-index --refresh и git update-index --really-refresh. Обе команды немедленно выходят из строя и, похоже, не выполняют сканирование и двоичное сравнение каждого файла в дереве.

цитата из another question:

Установка core.trustctime в false делает мерзавец игнорировать ложные изменения CTIME, которые, по-видимому происходит на некоторых файловых системах. Мне нужно противоположное поведение: перекомпилировать хэш файла, даже когда mtime не изменился.

+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 : Я должен признать, что вопрос о том же, но есть некоторые соображения, чтобы оставить мой вопрос: 1. Этот вопрос пока не имеет решения; 2. Я не нашел этот вопрос по ключевым словам. Может быть, оно сформулировано так, что его никто не может найти ?; 3. Этот вопрос составляет 3 года и имеет только 129 просмотров. – Paul

+0

Пока ответа нет, вопрос по-прежнему является дубликатом. Помечаемый как таковой, он будет найден по ключевым словам. Рассмотрим щедрость баунти. – Basilevs

ответ

6

Во-первых, вы должны попытаться найти корень проблемы. Использование Git информации о статах (не только метка времени, но и размер), как правило, очень надежна. Если у вас возникла проблема с этим, это, скорее всего, означает, что у вас что-то серьезно нарушено в вашей системе. Git не будет единственным инструментом, который будет разбит тогда (ваша система резервного копирования и ваша система сборки, скорее всего, тоже будут).

Вы можете попробовать это (после прочтения предупреждения ниже):

rm -f .git/index 
git reset HEAD 

Команда rm будет, очевидно, отказаться от какой-либо информации в индексе, то есть: все стат информация, Git использует внутренне, чтобы избежать сравнения файлов (что вы ожидаете), и любые git add, git reset, информация о несвязанных файлах, которые вы, возможно, не указали в своем индексе. С другой стороны, это не изменит никакой фиксированной информации. Команда git reset HEAD создаст новый индекс, который соответствует HEAD, т. Е. После этой команды Git считает, что у вас нет изменений, поставленных в индексе.

Git восстановит информацию о статике (то есть повторит сравнение всех файлов) во время git reset HEAD, так что это решение, чтобы сообщить Git «забыть информацию о статистике сейчас», чтобы запустить после того, как вы разбили свою статистику, но это это не способ сказать Git «никогда не использовать информацию о статистике снова».

+0

Прямо сейчас я не могу вспомнить, что я делал для достижения результата. Может быть, я распаковал файлы из архива. Из-за детализации я принимаю ваш ответ. – Paul

2

Одна вещь, которую вы можете сделать, это обновить временную метку всех файлов до текущего времени; вы можете сделать это с помощью find . -exec touch {} \;

+1

Да, я думал об этом, но это всего лишь обходное решение, а не подлинное решение. – Paul