Git depo boyutunu küçültme


291

Repo boyutunu azaltma konusunda iyi bir öğretici aramaya çalıştım, ancak hiçbirini bulamadım. Repo büyüklüğümü nasıl azaltabilirim ... yaklaşık 10 MB, ancak şey Heroku sadece 50 MB'a izin veriyor ve uygulamamı geliştirmeyi bitirdiğim yer yok.

.Gitignore'a olağan şüphelileri (log, satıcı, doc vb.) Zaten ekledim. Son zamanlarda sadece .gitignore ekledim.

Baska öneri?


1
Sadece yaptım ve 2.2 mb'ye indirdi ... çok teşekkürler! Bu Heroku'da repo boyutunu azaltmamış gibi görünse de ... hmm
sent-hil

11
--Force kullanarak itin. Değişiklik olmasa bile içeriğin üzerine yazacaktır (yeni taahhüt yok, vb.)
Marcin Gil

1
@MarcinGil - Aşağıda, VonC uzak sunucuyu temizlemek için sunucuya erişmeniz gerektiğini belirtir (eğer doğru şekilde ayrıştırırsam).
jww

1
Ne ekleyeceklerini bilmiyorlarsa diğer okuyuculara yardımcı olmak için sadece bir yorum .gitignore, gitignore.io'da geliştirici .gitignoreortamınıza göre iyi bir kurulum yapmanıza yardımcı olacak güzel bir hizmet var .
Blairg23

Yanıtlar:


353

git gc --aggressivebudama sürecini gerçekleşmeye zorlamanın bir yoludur (emin olmak için:) git gc --aggressive --prune=now. You have diğer komutları da repo temizlemek için. Yine de unutmayın, bazen git gctek başına repo boyutunu artırabilir !

Ayrıca a'dan sonra filter-branch, geçmişten kaldırılacak bazı dizinleri işaretlemek için de kullanılabilir (daha fazla alan kazanarak); buraya bakın . Ancak bu, hiç kimsenin kamuoyu deponuzdan çekilmediği anlamına gelir. filter-branchyedek referansları tutabilir.git/refs/original , böylece dizin de temizlenebilir.

Son olarak, bu yorumda ve bu soruda belirtildiği gibi ; Reflogun temizlenmesi yardımcı olabilir:

git reflog expire --all --expire=now
git gc --prune=now --aggressive

Daha da eksiksiz ve muhtemelen tehlikeli bir çözüm, git deposundan kullanılmayan nesneleri kaldırmaktır


Başka bir senaryoda, ayrıca bkz. Stackoverflow.com/questions/1029969/…
VonC

1
Kendine not: uzak dalları unutma: stackoverflow.com/questions/11255802/…
VonC

1
Kendine not: uzak etiketleri unutma
saiyancoder

1
Uzak referanslara ek olarak, reflog, kaldırmaya çalıştığınız referansların saklanmasına neden olabilecek başka bir şeydir. stackoverflow.com/q/27489761/1072626
vossad01

1
@jww Bunun tamamen yerel bir operasyon olduğunu onaylıyorum. Uzak repo büyüklüğünde bir etkisi yoktur. Bunu yapmak için o uzak repo sunucusuna doğrudan erişmeniz gerekir.
VonC

95

Cevaplarınız için teşekkürler. İşte yaptım:

git gc
git gc --aggressive
git prune

Hile yapmış gibi görünüyordu. Yaklaşık 10,5 MB ile başladım ve şimdi 980KB'den biraz daha fazla.


9
pruneher zaman tarafından çalıştırılır gc(varsayılan olarak 2 hafta önce).
Cas

118
U anda kullanmakta kadar kuru erik ile tüm 3 çalışabilirgit gc --aggressive --prune=now
rahul286

1
Ancak, depoyu sildiğimde tekrar klonladığımda, boyut hala büyük. Bununla nasıl başa çıkarsın?
cwtuan

2

Benim durumumda, birkaç büyük (> 100Mb) dosya ittim ve kaldırmaya devam ettim. Ama yine de repo tarihimdeydi, bu yüzden onları da ondan çıkarmak zorunda kaldım.

Hile neydi?

bfg -b 100M  # To remove all blobs from history, whose size is superior to 100Mb
git reflog expire --expire=now --all
git gc --prune=now --aggressive

O zaman, dalınızı zorlamanız gerekir:

git push origin <your_branch_name> --force

bfg , demlemek kullanılarak Linux ve macOS üzerine kurulabilen bir araçtır:

brew install bfg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.