Почему "обновление индекса Git не удалось" отображается
Я использую Windows. При размещении файлов я получаю эту ошибку.
Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.
затем следует список файлов, которые были преобразованы из LF в CRLF
после Большого чтения проблемы CRLF / LF с кросс-платформой использования Git я более или менее понимаю, что происходит, и я пытаюсь определить, какая настройка autocrlf лучше для меня, но я не могу понять, почему Git говорит, что обновление индекса не удалось. Насколько я понимаю, она преобразовал EOF, так в чем проблема с этим и почему он говорит мне, что обновление индекса не удалось. Нужно ли мне что-то исправить ( кроме выбора соответствующей настройки autocrlf) или я могу просто продолжить
затем у меня есть два варианта продолжения и разблокировки индекса, что они означают и каков наилучший курс действий.
3 ответов
git config --global core.autocrlf false
всегда была моей рекомендации (см. "git 1.6.4 beta на Windows (msysgit) - Unix или DOS прекращение строки").
однако в вашем случае вы можете "продолжить", но это предупреждение должно упомянуть, что преобразование некоторых файлов не может быть обратимым:
core.safecrlf
если true, git проверяет, является ли преобразование CRLF обратимым при активном преобразовании конца строки. Git проверит, изменяет ли команда файл в дерево работы прямо или косвенно. Например, фиксация файла с последующей проверкой того же файла должна привести к исходному файлу в дереве работы. Если это не относится к текущему параметру
core.autocrlf, git отклонит файл.
Переменная может быть установлена в "warn", в этом случае git будет предупреждать только о необратимом преобразовании, но продолжит операцию.
если вы не хотите видеть эти предупреждения, как описано в этот нить, вы можете установить core.safecrlf до false.
вы также можете спрятать свои файлы через меню tools gui git и добавить некоторые параметры в эти инструменты, например, this конфигурационный файл git.
Интерес заключается в том, что для каждого инструмента вы можете добавить:
guitool.<name>.norescan
не сканируйте рабочий каталог на наличие изменений после завершения выполнения инструмента.
не могли бы Вы уточнить немного по индексу разблокировки
вы можете увидеть это сообщение в index.tcl скрипт Git-gui: он удаляет индекс.файл блокировки Git-gui создается при манипулировании индексом.
Вы можете увидеть больше на "файл API в разделе" Документация:
взаимоисключение.
Когда мы пишем новый индексный файл, сначала мы создаем новый файл$GIT_DIR/index.lock, запишите в него новое содержимое и переименуйте его в окончательный пунктом$GIT_DIR/index.
Мы пытаемся создать СO_EXCLчтобы мы могли заметить и потерпеть неудачу, когда кто-то другой уже пытается обновить индексный файл.
Я также столкнулся с этим даже tho мой core.autocrlf настройки уже false и core.safecrlf не установлено. Я подозреваю, что виновником является настройка конфигурации diff.astextplain.textconv.
когда я подбежал git config --list, на выходе была показана следующая строка:
diff.astextplain.textconv=astextplain
Я не думаю, что этот параметр на самом деле связан с предупреждением/ошибкой, но он вдохновил меня посмотреть на преобразование текста, которое может быть сделано. После небольшого спелеологического онлайн и в моем РЕПО я обнаружил следующую строку в моем РЕПО .gitattributes по:
* text=auto
[Я, вероятно, получил .gitattributes по файл из GitHub.]
учитывая, что только вышеуказанная строка не была прокомментирована в ней, и далее, что дело с "автомагическими" преобразованиями с окончанием строки имеет всегда была головная боль, я решил удалить этот файл из моего РЕПО. После этого постановка тех же файлов больше не запрашивала меня с предупреждением/ошибкой "обновление индекса Git не удалось".
TL; DR: это предупреждение означает, что git может вернуть вам текстовый файл в стиле Windows, несмотря на то, что вы проверили текстовый файл в стиле UNIX.
UNIX и Windows отличаются тем, как они сохраняют разрывы строк в текстовых файлах. Википедия имеет список разрывов строк на разных ОС
предупреждение, которое вы получаете, воспроизводимо, если вы сделаете следующее В Windows:
- создайте репозиторий git в пустом каталог
-
создайте фиксацию, представляющую начальное пустое состояние РЕПО:
git commit --allow-empty -m "initial commit" -
использовать
git config core.autocrlfиgit config core.safecrlfчтобы проверить, чтоautocrlfустановлено значениеtrueиsafecrlfне установлен (без вывода). Если это не так, используйте следующие команды, чтобы установить их вgit config core.autocrlf true git config --unset core.safecrlf использовать Блокнот++ написать текстовый файл с именем
text.txtв формате UNIX. Написать файл, содержащий хотя бы одну строку ломать. Вот как вы выбираете окончание строки UNIX:
-
git add text.txt. Вы получаете предупреждениепредупреждение: LF будет заменен на CRLF в тексте.формат txt.
Файл будет иметь исходные окончания строк в вашем рабочем каталоге. зафиксировать текстовый файл: 'git commit-m" добавить файл с окончаниями UNIX"
-
теперь посмотрите, как выглядит файл например, если посмотреть с дерева. Во-первых, проверьте версию перед созданием файла (go 1 commit back). Файл
text.txtисчезает из рабочего каталога:git checkout ~1 -
теперь восстановите версию после создания файла
git checkout master
файл text.txt восстановлена. Но откройте его в Notepad++ и проверьте формат окончания строки в нижней строке состояния Notepad++:
файл, который вы проверили, имеет окончание строки в стиле Windows, но файл, который вы отправили, имел окончание файла в стиле UNIX! Вот о чем предупреждает сообщение:параметры core.autocrlf=true вместе с core.safecrlf=<unset> означает, что файлы, которые вы восстанавливаете из дерева, могут отличаться от файлов, которые вы зарегистрировали, потому что они могут иметь разные окончания файлов.
