/ / Czy repozytorium git może zostać uszkodzone, jeśli polecenie modyfikujące go ulegnie awarii lub zostanie przerwane? - git, crash, transakcyjny

Czy repozytorium git może zostać uszkodzone, jeśli polecenie modyfikujące ulegnie awarii lub zostanie przerwane? - git, crash, transakcyjne

Podczas zabawy git, Czasami próbuję różnych rzeczy, a następnie przerywam polecenia, które trwają zbyt długo (np. Niektóre git svn polecenia zawieszające się podczas problemów z siecią). To sprawiło, że pomyślałem:

Czy zawsze można bezpiecznie wymusić przerwanie polecenia (Ctrl-C lub kill)? Co się stanie, jeśli polecenie ulegnie awarii (brak pamięci, błąd, problem z siecią / FS)? Czy zmiany w repozytorium są „transakcyjne” w tym sensie, że niekompletne zmiany są „wycofywane” (jak w systemie plików wersji)? Czy w takim przypadku ryzykuję uszkodzenie repozytorium?

Jestem pewien, że inteligentni ludzie pracujący na git musieli to wziąć pod uwagę, ale nie mogłem znaleźć żadnych informacji w instrukcji git ani w Internecie.

Odpowiedzi:

9 dla odpowiedzi № 1

Repozytorium jest w pełni transakcyjne, tak.

Drzewo pracy jest prawie transakcyjne, ale istniejeto przypadek narożny, z którym nie można łatwo sobie poradzić. Kasa wykonuje wszystkie niezbędne kontrole i zapisuje nową zawartość do plików tymczasowych, aw tym czasie nic nie jest modyfikowane, jeśli ją przerwiesz. Ale wtedy zmienia nazwę plików na drzewo jeden po drugim i na koniec aktualizuje referencję HEAD, a przerwanie w tej fazie może spowodować częściowe zmiany wprowadzone w drzewie. Nie ma masowej zmiany nazwy, która pozwoliłaby na atomowe wykonanie tej czynności.