O índice geralmente é armazenado no nível superior do diretório .git
do repositório. Sua localização pode ser substituída usando a variável de ambiente GIT_INDEX_FILE (pode valer a pena verificar se: printf '%s\n' "$GIT_INDEX_FILE"
).
Se o diretório do arquivo de índice não fosse gravável, você receberia uma mensagem de erro anterior:
fatal: Unable to create '/path/to/.git/index.lock': Permission denied
Podemos ter certeza de que o diretório que contém é gravável, já que você não recebeu esta mensagem de erro.
A mensagem de erro que você denunciou é emitida perto do final da atividade para git add . Infelizmente, o errno
não é reportado por git add ; se tivesse sido relatado, poderíamos tentar adivinhar o problema com base no erro relatado.
git add mostra o erro que você reportou se tiver algum problema ao escrever o conteúdo do novo índice (o conteúdo é gravado no arquivo .lock
) ou quando ele tenta confirmar o bloqueio -file (renomeie o arquivo .lock
para ocupar o lugar do arquivo de índice existente; isto é 'comprometer' a transação de arquivo de bloqueio, não o que git commit faz).
Problema de espaço em disco?
Como é o espaço livre no volume que contém seu arquivo de índice? Talvez esteja quase cheio. Eu tenho sido capaz de reproduzir a mensagem de erro quando o índice está em um volume que apenas o espaço livre suficiente para criar o arquivo .lock
, mas não o suficiente para manter todo o conteúdo.
Questão "Flag"?
Existe algum sinalizador no arquivo de índice? No meu sistema, ter uchg
(“nível de usuário imutável”) ou uappnd
(“somente no nível de usuário anexado”) definido no arquivo de índice fará com que git add dê o mesmo mensagem de erro que você está recebendo. Verifique os sinalizadores com ls -lO
no seu arquivo de índice (os sinalizadores são exibidos após o proprietário do grupo e antes do tamanho; ele mostrará -
se não houver sinalizadores definidos). Se você vir sinalizadores, use os chflags comando para removê-los. Você pode querer investigar como os flags chegaram lá e se algum outro arquivo os possui (talvez com ls -lOR
).
Use ktrace
Se nenhuma das sugestões acima solicitar uma solução, você poderá quebrar ktrace e kdump para descobrir qual chamada de sistema está falhando imediatamente antes que a mensagem de erro seja impressa .
ktrace git add whatever
kdump | less
: Go to the bottom. Search for the error message.
: What CALL is RETurning -1? What is the reported errno?
Quando o volume está cheio, vejo isto:
4728 git CALL write(0x9,0x116d24,0x18b0)
4728 git RET write -1 errno 28 No space left on device
4728 git CALL write(0x2,0xbfffcd00,0x26)
4728 git GIO fd 2 wrote 38 bytes
"fatal: Unable to write new index file
"
Quando tenho um sinalizador incompatível, vejo isto:
4742 git CALL rename(0x105bdd,0xbfffdfa8)
4742 git NAMI ".git/index.lock"
4742 git NAMI ".git/index"
4742 git RET rename -1 errno 1 Operation not permitted
4742 git CALL write(0x2,0xbfffcd40,0x26)
4742 git GIO fd 2 wrote 38 bytes
"fatal: Unable to write new index file
"