Do jakich „luźnych obiektów” odnosi się interfejs Git?


219

Kiedy otwieram Git GUI , pojawia się komunikat, do którego się odnosi loose objects. Zrobiłem to git gci usunąłem wiadomość.

Co to jest loose objectsi jak mogę temu zapobiec?


Możesz po prostu kliknąć „Tak” w wyskakującym komunikacie, gdy pojawi się pytanie, czy luźne obiekty powinny być teraz zapakowane. Git GUI uruchomi się git gcdla ciebie, z ładnym paskiem postępu GUI (choć pokazywany jest jako zablokowany przez większość czasu).
— ADTC

Odpowiedzi:


144

Obiekt (obiekty BLOB, drzewa i zatwierdzenia) z SHA powiedzą - 810cae53e0f622d6804f063c04a83dbc3a11b7ca będzie przechowywany w

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(podział na pierwsze dwa znaki w celu poprawy wydajności systemu plików, ponieważ obecnie nie wszystkie obiekty są przechowywane w tym samym katalogu)

Obiekty przechowywane jak wyżej nazywane są obiektami sypkimi.

Kiedy zaczynasz od swojego repo, najczęściej masz luźne przedmioty. Gdy liczba rośnie, staje się nieefektywna i są one przechowywane w pliku paczki. Takie obiekty nazywane są obiektami spakowanymi.

 git gc

to jest to, co uruchamiasz, aby spakować obiekty (Zwykle luźne obiekty, które nie są potrzebne, a kilka tygodni też są usuwane, a dzięki --prune=<date>opcji możesz wymusić usunięcie luźnych obiektów, które nie są już potrzebne. Tak jak w przypadku zmiany zatwierdzenia. Stary obiekt zatwierdzenia nie jest dłużej potrzebne).


3
--pruneOpcja jest domyślnie włączona, a ponieważ git gcjest automatycznie uruchamiany przez potocznym (np commit), zazwyczaj nie trzeba się martwić o to. Nie używam git gui i nie mogę znaleźć dokładnie, gdzie jest on wyzwalany w źródle, ale albo wykonuje własną kontrolę, albo po prostu przechwytuje gcwyzwalane przez wywołane polecenie. Z pewnością nie ma się o co martwić, po prostu spowodowane zwykłym użytkowaniem.
— Cascabel,

21
czy jest jakaś wada pakowania luźnych przedmiotów? Jeśli nie, to dlaczego Git nie robi tego automatycznie?
— Louis Rhys

13
Nie sądzę, że to prawda, że ​​dzieje się to automatycznie. Często popełniam, ale wspomniane „git gui” zawierało 50 000 luźnych obiektów (i zastanawiałem się, dlaczego git był tak cholernie powolny, duży projekt przez ~ 4 lata bez ręcznego gc)
— Kevin

1
@Kevin Czy wydajność Twojego dużego projektu poprawiła się po git gcręcznym uruchomieniu ? Myślę, że powinno się to poprawić, ponieważ luźne obiekty są nieefektywne, a 50 000 to bardzo duża liczba. Dowiedziałem się również, że pakowanie znacznie zmniejsza również przestrzeń używaną przez .gitfolder.
— ADTC

3
@LouisRhys, „Kiedy obiekty są zapisywane na dysk, często mają one format luźny, ponieważ dostęp do tego formatu jest tańszy. Jednak ostatecznie będziesz chciał zaoszczędzić miejsce, pakując obiekty” - z Git Book link w odpowiedzi poniżej
— Chris

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.