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?
156
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 gc
aby "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 ).
WARNING
Polecenie 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,.gitignore
zostanie 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 uruchamiajgit clean
bez uruchomienia go w trybie interaktywnym z-i
zamiast-f
lub przynajmniej najpierw wykonując próbny bieg --n
a potem ponownie z-f
.Biegać:
Usuwa wszystkie nieaktualne gałęzie śledzenia, które zostały już usunięte w,
origin
ale nadal są lokalnie dostępne wremotes/origin
.„ G arbage C olekcja” - uruchamia housekeeping zadania (kompresy zmiany usuwa luźne / niedostępne obiektów).
--auto
Flag najpierw określa, czy konieczne jest praca, i wyjść, nie robiąc nic, jeśli nie.źródło
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:
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).
źródło
tak tak,
git gc
jest rozwiązaniem, oczywiście,i lokalnie - wystarczy usunąć lokalne repozytorium i ponownie je sklonować,
ale jest tu coś ważniejszego ...
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!
źródło
Uruchomienie tego polecenia jest niezwykle niebezpieczne, ale zmniejszy twoje repozytorium, usuwając wszystkie pliki odzyskiwania / kopii zapasowej git:
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 togit reset --hard
przedgit 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.źródło
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ść.źródło
git clean
nie 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 clean
często też to robięgit repack -ad
, co zmniejsza liczbę plików paczek.źródło
git gc
procesu, więc nie trzeba go uruchamiać osobno