Wygląda na to, że mój projekt z każdym dupkiem staje się coraz większy commit/push. Czy istnieje sposób na wyczyszczenie mojego folderu git?
Wygląda na to, że mój projekt z każdym dupkiem staje się coraz większy commit/push. Czy istnieje sposób na wyczyszczenie mojego folderu git?
Odpowiedzi:
Nie jestem pewien, czego chcesz. Po pierwsze, oczywiście za każdym razem, gdy dokonujesz zatwierdzeń / wypychania, katalog będzie trochę większy, ponieważ musi przechowywać każde z tych dodatkowych zatwierdzeń.
Jednak prawdopodobnie chcesz, git gcaby "wyczyścił niepotrzebne pliki i zoptymalizował repozytorium lokalne" ( strona podręcznika ).
Innym ewentualnie Odpowiednie polecenie to git clean, które będą usuwać pliki nieśledzone z drzewa ( podręcznik strona ).
WARNINGPolecenie opisane powyżej przez @Kalle usunie WSZYSTKIE > NIEŚLADOWANE <PLIK I KATALOG W TWOIM KORZENIU GIT , a nie tylko „pliki wymienione w .gitignore”. Wszystko, co nie jest śledzone przez Git, niezależnie od tego, czy jest wymienione, czy nie, .gitignorezostanie wyczyszczone. git clean -dfX(zwróć uwagę na literę X) spowoduje usunięcie tylko elementów, dla których obowiązuje reguła .gitignore. Zwróć uwagę na to ostrzeżenie: Nigdy nie uruchamiaj git cleanbez uruchomienia go w trybie interaktywnym z -izamiast -flub przynajmniej najpierw wykonując próbny bieg - -na potem ponownie z -f.
Biegać:
git remote prune origin
Usuwa wszystkie nieaktualne gałęzie śledzenia, które zostały już usunięte w, originale nadal są lokalnie dostępne w remotes/origin.
git gc --auto
„ G arbage C olekcja” - uruchamia housekeeping zadania (kompresy zmiany usuwa luźne / niedostępne obiektów). --autoFlag najpierw określa, czy konieczne jest praca, i wyjść, nie robiąc nic, jeśli nie.
Jeden ze scenariuszy, w którym repozytorium git będzie się znacznie zwiększać z każdym zatwierdzeniem, to taki, w którym zatwierdzasz pliki binarne, które generujesz regularnie. Ich przechowywanie nie będzie tak wydajne jak plik tekstowy .
Innym jest taki, w którym masz ogromną liczbę plików w jednym repozytorium (co jest limitem git ) zamiast kilku podrzędnych ( zarządzanych jako podmoduły ).
W tym artykule na temat przestrzeni git , AlBlue wspomina:
Zwróć uwagę, że Git (i Hg oraz inne DVCS) cierpią z powodu problemu polegającego na tym, że (duże) pliki binarne są wpisywane, a następnie usuwane, ponieważ nadal będą pojawiać się w repozytorium i zajmować miejsce, nawet jeśli nie są aktualne .
Jeśli masz duże pliki binarne przechowywane w repozytorium git, możesz rozważyć:
git filter-branch (ostrzeżenie: spowoduje to przepisanie historii, co jest złe, jeśli już wypchnąłeś swoje repozytorium i jeśli inni go wyciągnęli)Jak już wspomniano w „ Jakie są granice plików w Git (liczba i wielkość)? ”, Tym bardziej niedawne (2015, 5 lat po tej odpowiedzi) Git LFS z GitHub to sposób zarządzania tymi dużych plików (przechowując je poza Repozytorium Git).
tak tak, git gcjest rozwiązaniem, oczywiście,
i lokalnie - wystarczy usunąć lokalne repozytorium i ponownie je sklonować,
sekundy, w których czekasz na przetworzenie tego ogromnego gita i danych zewnętrznych, są zbierane do długich minut, które są zbierane do godzin nieefektywnego spędzonego czasu
Utwórz nowe (całkowicie, a nie tylko gałąź) repozytorium od podstaw , w tym jedyną najnowszą wersję plików, naturalnie stracisz całą historię,
ale kiedy w świecie kodu nie jest czas na sentymentalność, nie ma sensu przeciągać przez całe 5 lat kodu po każdym zatwierdzeniu lub różnicach, nadal możesz gdzieś przechowywać stare git & externals, jeśli poczujesz nostalgię:]
ale w pewnym momencie naprawdę musisz iść naprzód:]
Twój zespół będzie Ci wdzięczny!
Uruchomienie tego polecenia jest niezwykle niebezpieczne, ale zmniejszy twoje repozytorium, usuwając wszystkie pliki odzyskiwania / kopii zapasowej git:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Spowoduje to usunięcie wszystkich plików, których git używa do odzyskania repozytorium po złym poleceniu, na przykład, jeśli to zrobiłeś git reset --hard, zwykle możesz odzyskać utracone pliki. Ale jeśli zrobisz to git reset --hardprzed git reflog expire...rozkazem, stracisz wszystko. Teraz jedyną nadzieją jest użycie narzędzia, które analizuje system plików i próbuje odzyskać usunięte pliki, jeśli nie zostały one zastąpione.
git clean -d -f -i to najlepszy sposób, aby to zrobić.
Pomoże to w czyszczeniu w bardziej kontrolowany sposób.
-i oznacza interaktywność.
git cleannie służy ono do czyszczenia repozytorium, a raczej do czyszczenia katalogu. Uwaga dla użytkowników, którzy ślepo kopiują / wklejają; usuwa to nieśledzone pliki / katalogi, które możesz chcieć lokalnie.
Nie wiem, czy to się zmniejszy, ale po uruchomieniu git cleanczęsto też to robię git repack -ad, co zmniejsza liczbę plików paczek.
git gcprocesu, więc nie trzeba go uruchamiać osobno