/ / Um repositório git pode ser corrompido se um comando modificando ele falhar ou for abortado? - git, crash, transacional

Um repositório git pode ser corrompido se um comando modificando ele falhar ou for abortado? - git, crash, transacional

Quando brincar com git, Às vezes eu experimento coisas, depois aborto comandos que demoram muito (por exemplo, alguns git svn comandos que travam durante problemas de rede). Isso me fez pensar:

É sempre seguro abortar com força um comando (Ctrl-C ou kill) E se um comando travar (falta de memória, bug, problema de rede / FS)? O repositório muda "transacional" no sentido de que alterações incompletas são "revertidas" (como em um sistema de arquivos de controle de versão)? Ou arrisco a corrupção do repositório nesse caso?

Tenho certeza de que as pessoas inteligentes que trabalham no git devem ter levado isso em conta, mas não consegui encontrar nenhuma informação no manual do git ou online.

Respostas:

9 para resposta № 1

O repositório é totalmente transacional, sim.

A árvore de trabalho é quase transacional, mas háO Checkout faz todas as verificações necessárias e grava o novo conteúdo em arquivos temporários e, durante o tempo, nada é modificado se você o interromper. Mas, então, ele está renomeando os arquivos para a árvore. um por um e, finalmente, atualiza o REF HEAD e interromper nessa fase pode deixá-lo com alterações parciais feitas para a árvore. Não há renomeação em massa para permitir fazer isso atomicamente.