Görünüşe göre projem gittikçe büyüyor commit/push. Git klasörü temizlemenin bir yolu var mı?
Görünüşe göre projem gittikçe büyüyor commit/push. Git klasörü temizlemenin bir yolu var mı?
Yanıtlar:
Ne istediğinden emin değilim. Her şeyden önce, elbette her taahhüt / itme dizini biraz daha büyüyecektir, çünkü bu ek taahhütlerin her birini saklaması gerekir.
Ancak, muhtemelen git gc"gereksiz dosyaları temizler ve yerel havuzu optimize eder" istersiniz ( manuel sayfa ).
Başka olasılıkla ilgili komut git cleanhangi silmek için ağacı (dan izlenmeyen dosyaları manuel sayfa ).
WARNING@Kalle tarafından yukarıda yazılan komut , sadece ".gitignore içinde listelenen dosyalar" değil , HER ŞEKİLDE KULLANILMAMIŞ <DOSYA VE DİZİNİN GİT KÖKÜNÜZDE kaldırılmasını sağlar. Git tarafından takip edilip edilmediğine bakılmaksızın Git tarafından izlenmeyen her şey silinir. (üzerinde yer alan duruma dikkat edin ) yalnızca geçerli kuralı olan öğeleri kaldıracaktır . Bu uyarıya dikkat edin: Hiçbir zaman çalıştırmak ile, etkileşimli modda çalışan ya olmaksızın yerine ya da en azından ilk bir prova yapıyor - ile daha sonra tekrar . .gitignoregit clean -dfXX.gitignore git clean-i-f-n-f
Çalıştırmak:
git remote prune origin
Daha önce kaldırılmış originancak yerel olarak hala kullanılabilir durumda olan tüm eski izleme dallarını siler remotes/origin.
git gc --auto
' G arbage C ollection ' - temizlik görevlerini yürütür (revizyonları sıkıştırır, gevşek / erişilemeyen nesneleri kaldırır). --autoBayrak ilk herhangi bir iş gerekip gerekmediğini belirler ve eğer herhangi bir şey yapmadan çıkışlar.
Git repo'nuzun her taahhütte ciddi şekilde büyüyeceği bir senaryo, düzenli olarak oluşturduğunuz ikili dosyaları yürüttüğünüz senaryodur . Depolama alanları metin dosyasından daha etkili olmayacaktır .
Başka sen içindeki dosyaların çok büyük sayıda biridir biri (a olan repo Git sınırı (yerine birkaç subrepos arasında) submodules olarak yönetilen ).
Git Space hakkındaki bu makalede , AlBlue şunlardan bahseder:
Git'in (ve Hg'nin ve diğer DVCS'lerin), (büyük) ikili dosyaların teslim edildiği, ardından silindikleri bir sorundan muzdarip olduğunu unutmayın; çünkü bunlar güncel olmasa bile depoda görünecek ve yer kaplayacaklardır .
Git deponuzda büyük ikili dosyalar varsa, şunları düşünebilirsiniz:
git filter-branch (uyarı: zaten repo itti varsa bu kötü geçmişini, yeniden yazacak ve diğer ondan çekti varsa)Ben de belirtildiği gibi " Ne Git'te dosya sınırları (sayı ve boyut)? Hangi daha yeni," (2015, bu cevap sonrası 5 yıl) Git LFS GitHub depolayarak (o büyük dosyaları yönetmek için bir yoldur dışında Git deposu).
evet evet, git gcçözüm, doğal olarak,
ve yerel olarak - sadece yerel havuzu silebilir ve tekrar klonlayabilirsiniz,
o büyük git ve harici öğelerin işlenmesi için beklediğiniz saniye, harcanan saatler süren verimsiz zamana kadar toplanan uzun dakikalara toplanır,
Yeni oluştur (tamamen değil, sadece bir kolu) sıfırdan depo , dosyaların sadece son sürümü de dahil olmak üzere doğal tüm geçmişini gevşek edeceğiz
ancak kod dünyasında duygusal olmanın zamanı olmadığında, her taahhüt veya farkın 5 yıllık kodunun tamamı boyunca sürüklenmenin bir anlamı yoktur, nostaljik olursanız, eski git ve dışsalları bir yerde saklayabilirsiniz:]
ancak, bir noktada gerçekten ilerlemeniz gerekir:]
ekibiniz size teşekkür edecek!
Bu komutu çalıştırmak son derece tehlikelidir, ancak tüm git kurtarma / yedekleme dosyalarınızı silerek deponuzu küçültür:
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Git deponuzu bazı kötü komutlardan kurtarmak için kullandığı tüm dosyaları silecektir, örneğin, yaptıysanız git reset --hard, genellikle kaybolan dosyaları kurtarabilirsiniz. Ama komuttan git reset --hardönce yaparsanız git reflog expire..., her şeyi kaybettiniz. Şimdi, tek umudunuz, dosya sisteminizi analiz eden ve geçersiz kılınmamışsa silinmiş dosyaları kurtarmaya çalışan bir araç kullanmaktır.
git clean -d -f -i bunu yapmanın en iyi yoludur.
Bu, daha kontrollü bir şekilde temizlemeye yardımcı olacaktır.
-i interaktif anlamına gelir.
git clean, dizinin temizlenmesi kadar repoyu temizlemek için olmadığını belirtmek isterim . Körü körüne kopyalayıp yapıştıran kullanıcılar için; bu, yerel olarak gerçekten isteyebileceğiniz izlenmemiş dosyaları / dizinleri kaldırır.
Büzülecek mi bilmiyorum, ama çalıştırdıktan sonra git clean, sık sık da yaparım git repack -ad, bu da paket dosyalarının sayısını azaltır.
git gcsürecin bir parçası , bu yüzden ayrı çalıştırmaya gerek yok