Pro Git kitabının 9. Bölümünde Nesneleri Kaldırma hakkında bir bölüm vardır .
Adımları kısaca burada özetleyeyim:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
Daha önce açıklanan filter-branchyeniden ödeme seçeneği gibi , yeniden yazma işlemidir. Geçmişi yayınladıysanız --force, yeni referansları zorlamanız gerekir.
filter-branchYaklaşım çok daha fazla güçlüdür rebaseo yana, bir yaklaşım
- tüm şubeler / referanslar üzerinde aynı anda çalışmanıza olanak sağlar,
- herhangi bir etiketi anında yeniden adlandırır
- dosyanın eklenmesinden bu yana birkaç birleştirme işlemi olsa bile temiz çalışır
- dosya (a) dal (lar) ının geçmişinde birkaç kez (yeniden) eklendi / kaldırılsa bile temiz çalışır
- yeni, ilgisiz taahhütler yaratmaz, bunun yerine onlarla ilişkili ağaçları değiştirirken kopyalar. Bu, imzalı taahhütler, taahhüt notları vb. Gibi şeylerin korunduğu anlamına gelir.
filter-branch yedekleri de tutar, böylece yeniden günlüklerin ve çöp toplama işlemlerinin süresi dolmadıkça deponun boyutu hemen azalmaz:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger