Git sparse checkout error "Запись 'путь / к / файлу' не обновляется. Не удается обновить разреженную проверку" - PullRequest
0 голосов
/ 10 июля 2019

Я только что сделал редкую проверку, выполнив следующие шаги

git clone http://location/repo.git
# create .git/info/sparse-checkout file
git config --bool core.sparsecheckout true
git read-tree -mu HEAD

К сожалению, последний шаг завершается неудачно с сообщением об ошибке

Entry 'path/to/file' not update. Cannot update sparse checkout

Что странно, потому что (1) path/to/file существует (2) процесс разреженной проверки завершился успешно на другом компьютере git версии 1.7.1 (Centos 6).Текущий компьютер представляет собой коробку Centos 7 с установленной версией git 1.8.3.1.Вывод git config --list идентичен на обеих машинах.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Ошибка возникает (для файлов, находящихся в рабочем дереве), если функция ie_match_stat не соответствует статистической информации. Этот конкретный вызов ie_match_stat передает CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE, поскольку ie_match_stat обычно подчиняется флагам записи кэша CE_VALID или CE_SKIP_WORKTREE, говоря: копия рабочего дерева актуальна , даже если она не. Код разреженного извлечения использует флаг skip-worktree (CE_SKIP_WORKTREE), чтобы пометить файлы, которые не должны быть извлечены, чтобы остальная часть Git не жаловалась на их отсутствие.

Следовательно, странности здесь:

  • Бит skip-worktree устанавливается для файла, который равен в рабочем дереве. Почему?
  • Кэшированные данные индекса stat для этого файла не совпадают с lstat результатами из этого файла. Почему?

Ответ на первый вопрос может быть следующим: , потому что пользователь установил его (используя git update-index). Ответ на второй может быть: , потому что пользователь изменил файл . Так что они совсем не странные, они просто подразумевают, что файл не соответствует тому, что было создано при начальной проверке или операции git read-tree. Если вы не заботитесь о потере содержимого файла, смело удаляйте его. Если вы заботитесь о содержимом, очистите бит skip-worktree (git update-index --no-skip-worktree), после которого git diff должен показать, что отличается.

В этой области могут быть некоторые ошибки, особенно в версиях Git, которые являются такими древними (Git 1.8.x - текущий Git - 2.22).

0 голосов
/ 10 июля 2019

Я по существу исправил проблему, удалив все файлы и повторив те же шаги. предположил , что это может быть ошибка в git, или IMO, что-то вроде повреждения файла.

...