После tar /untar git repo gitk показывает «Локальные незафиксированные изменения, не зарегистрированные в индексе»

У меня есть каталог, содержащий небольшой репозиторий git.

git status и gitk --all не показывают незафиксированных изменений.

Если я распакую /сожму этот каталог с помощью:

tar czf git-repo.tar.gz git-repo/

Затем перенесите этот tar-файл в тестовый каталог и распакуйте с помощью:

tar xzf git-repo.tar.gz

Когда я

cd test/git-repo/ gitk --all

gitk показывает строку вверху всех коммитов (с обычной красной точкой):

"Локальные незафиксированные изменения, не внесенные в индекс"

статус git по-прежнему показывает:

On branch master nothing to commit, working tree clean

Проверка на различия с:

diff -r git-repo/ test/git-repo/

Показывает без различий.

Если я запустил git clean, эта строка исчезнет.

Я пробовал git clean -i в надежде увидеть оскорбительное имя файла, однако оно завершается без запроса интерактивного подтверждения очистки. И после этого Гитк не показывает незафиксированных изменений.

Я работаю: git версия 2.11.0

Просто немного сложно объяснить клиенту "Почему происходят незавершенные изменения?" когда на самом деле нет.

Спасибо за понимание ...

4 голоса | спросил johnea 24 AMpTue, 24 Apr 2018 00:42:37 +030042Tuesday 2018, 00:42:37

1 ответ


0
---- +: = 0 =: + ---- просматривает информацию о кеше в индексе, чтобы определить, является ли ваш рабочий каталог грязным или нет.Индекс хранит информацию о состоянии текущего рабочего каталога, поэтому ему не нужно анализировать файлы.Когда вы запускаете ---- +: = 1 =: + ---- , он будет сравнивать содержимое ---- +: = 2 =: + ---- с содержимым индекса, чтобы показать поэтапноизменения.Это просто и быстро;если идентификатор файла отличается, то его содержимое должно быть другим.Тем не менее, существует более дорогостоящее вычисление, чтобы определить, есть ли в файле неустановленные изменения.Файл должен иметь свой SHA1, вычисленный, а затем сравнить со значением в индексе.Чтобы избежать этих дорогостоящих вычислений, git кэширует информацию ---- +: = 3 =: + ---- о содержимом рабочего каталога в индексе:Теперь, когда вы запускаете ---- +: = 5 =: + ---- , он может просто ---- +: = 6 =: + ---- содержимое рабочего каталога.Если какой-либо файл имеет одинаковый размер, inode, ctime, mtime и т. Д., То git предполагает, что файл не изменился.Это позволяет ---- +: = 7 =: + ---- оставаться быстрым, если у вас есть неизмененные файлы.Но если какой-либо файл имеет другое значение, он будет хэшировать файл.Если файл имеет тот же хеш (т. Е. Вы просто запустили файл ---- +: = 8 =: + ---- без изменения содержимого), индекс будет обновлен с использованием новой информации кэша.Если вы действительно изменили файл, то ---- +: = 9 =: + ---- сообщит о неустановленном изменении.---- +: = 10 =: + ---- однако не мешает хешировать файл, чтобы определить, действительно ли он изменился.Вы можете сами убедиться в этом на тривиальном примере.Здесь у меня есть хранилище с одним файлом, ---- +: = 11 =: + ---- , без изменений.введите описание изображения здесьЕсли в командной строке я коснусь файла, обновляя его метку времени:Теперь gitk сообщает о моем хранилище как о незафиксированных изменениях:введите описание изображения здесьОднако, если я снова запускаю ---- +: = 13 =: + ---- в командной строке, он обновит информацию о кеше в индексе, и теперь ---- +: = 14 =: + ---- поймет, что на самом деле нет никаких неустановленных изменений:введите описание изображения здесьКогда вы распаковываете свой репозиторий - с рабочим каталогом - вы помещаете на диск рабочий каталог, который не соответствует информации кэша в индексе.---- +: = 15 =: + ---- будет фактически перефразировать содержимое, чтобы определить, что ваш рабочий каталог на самом деле не грязный, но ---- +: = 16 =: + ----не.Как правило, не очень хорошая идея копировать git-репозиторий и рабочий каталог;Вообще говоря, вы должны проверить новый рабочий каталог.
ответил Edward Thomson 30 PMpMon, 30 Apr 2018 12:48:39 +030048Monday 2018, 12:48:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132