2011-12-05 11 views
10

Podczas zabawy z git, czasami próbuję rzeczy, a następnie przerywa polecenia, które trwają zbyt długo (np. Niektóre polecenia git svn zawieszają się podczas problemów z siecią). Pomogło mi to:Czy repozytorium git może zostać uszkodzone, jeśli polecenie modyfikujące ulegnie awarii lub zostanie przerwane?

Czy zawsze można bezpiecznie wymusić polecenie (Ctrl-C lub kill)? Co jeśli polecenie się zawiesi (brak pamięci, błąd, problem sieci/FS)? Czy repozytorium zmienia się "transakcyjnie" w tym sensie, że niekompletne zmiany są "wycofywane" (jak w systemie plików wersji)? A może w takim przypadku ryzykuję korupcję repozytorium?

Jestem pewien, że inteligentni ludzie pracujący na gitarze musieli wziąć to pod uwagę, ale nie mogłem znaleźć żadnych informacji w podręczniku git lub online.

Odpowiedz

9

Repozytorium jest w pełni transakcyjne, tak.

Drzewo pracy jest prawie transakcyjne, ale istnieje sprawa narożna, której nie można łatwo rozwiązać. Kasa wykonuje wszystkie niezbędne kontrole i zapisuje nową zawartość do plików tymczasowych, a w czasie, nic nie jest modyfikowane, jeśli ją przerwiesz. Ale potem zmienia nazwy plików na drzewo jeden po drugim i na koniec aktualizuje HEAD ref, a przerywa w tej fazie może zostawić ci częściowe zmiany wprowadzone w drzewie. Nie ma masowej zmiany nazwy, aby pozwolić na to atomowo.

+0

Czy masz referencję (źródła gif lub dokumentację), że repo i akcja push są transakcyjne? –

Powiązane problemy