Неверный индексный файл в общей папке

Я использую Ubuntu VM поверх Windows 8, используя VMWare, и при использовании git я получил ошибку

error: bad index file sha1 signature
fatal: index file corrupt

При попытке commit,

Теперь я нашел способы исправить это (основной, удаление .git/index и повторная попытка, кажется немного обходным путем), но я хочу понять, что вызывает эту ошибку (отчасти потому, что они, как правило, работают случайным образом).

Я провел эксперимент и запустил пару команд в ~/ (обычный каталог) и в /mnt/hgfs/Shared with host/ (общий каталог с хостом Windows, который является моим ноутбуком).

In the regular directory it worked flawlessly, but in the shared directory it failed with the above error on the commit message.

Команды:

mkdir trial
cd trial
echo hello > world.txt
git init
git add .
git commit -m "msg"

Now I wonder, why does it matter that the directory is shared?
And in general, what causes this error? Which sha1 signature is the index file compared to (I didn't find anything that could store such a signature when running tree .git)?

1 ответ

Комментарий Эдварда Томсона верен - вы можете увидеть это из сообщения об ошибке и соответствующей функции исходного кода verify_hdr, который включает в себя эти строки:

git_SHA1_Init(&c);
git_SHA1_Update(&c, hdr, size - 20);
git_SHA1_Final(sha1, &c);
if (hashcmp(sha1, (unsigned char *)hdr + size - 20))
        return error("bad index file sha1 signature");

(магическая константа 20 - это размер в байтах вычисленного SHA1).

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

Другие вопросы по тегам