Odpowiedzi:
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).
--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.
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.
Git Book wyjaśnia to całkiem dobrze: https://git-scm.com/book/en/v2/Git-Internals-Packfiles
Luźne obiekty są prostszym formatem. Jest to po prostu skompresowane dane przechowywane w jednym pliku na dysku. Każdy obiekt zapisany w osobnym pliku.
git gcdla ciebie, z ładnym paskiem postępu GUI (choć pokazywany jest jako zablokowany przez większość czasu).