Mövzunu Açan
#1
Git ile büyük dosya geçmişini bulma
Geliştirme sürecinde projede hangi dosyaların zamanla büyüdüğünü, hangi commitlerde bu büyümenin başladığını tespit etmek çoğu zaman performans ve depolama yönetimi için kritik olabilir. Özellikle büyük dosyaların geçmişte neden ve ne zaman eklendiğini anlamak, temiz bir geçmiş ve daha sağlıklı sürüm kontrolü için hayati.
1. Büyük dosyaların geçmişte nereden geldiğini hızlı inceleme
Git, her commit’te değişen dosyaların tam sürümlerini saklar. Ancak zararlı veya gereksiz büyük dosyaları bulmak için bazı araçlar gerekir. İlk adım olarak repo içinde hangi dosyaların geçmişte büyüdüğünü anlamak için git rev-list ile başlayan akışları kullanabiliriz:
2. Büyük dosyaları tespit etmek için filtreli araçlar
grep ""[/i] ile belirli uzantıları ya da isimleri hedefleyebilirsiniz. Örneğin büyük dosyaların kullanıcı olarak hangi isimlerle geçtiğini görmek için otomatik filtreler kurabilirsiniz.
3. Tarihsel analiz için araçlar
4. Pratik bir örnek akış
git rev-list --objects --all | grep -E "\.bin$|\.zip$|\.png$" | sort -k 2 -n -r | head -n 20
[i]git show --
Geliştirme sürecinde projede hangi dosyaların zamanla büyüdüğünü, hangi commitlerde bu büyümenin başladığını tespit etmek çoğu zaman performans ve depolama yönetimi için kritik olabilir. Özellikle büyük dosyaların geçmişte neden ve ne zaman eklendiğini anlamak, temiz bir geçmiş ve daha sağlıklı sürüm kontrolü için hayati.
1. Büyük dosyaların geçmişte nereden geldiğini hızlı inceleme
Git, her commit’te değişen dosyaların tam sürümlerini saklar. Ancak zararlı veya gereksiz büyük dosyaları bulmak için bazı araçlar gerekir. İlk adım olarak repo içinde hangi dosyaların geçmişte büyüdüğünü anlamak için git rev-list ile başlayan akışları kullanabiliriz:
- git rev-list --objects --all | sort -k 2 -r -n | head -n 100 komutu, tüm commit’ler üzerinden depodaki nesneleri (dosya içeriklerini) ve hangi dosyaların en büyük olduğunu hızlıca gösterir.
- git verifypack -v .git/objects/pack/pack-*.idx | sort -k 3 -n -r | head -n 20 komutu ile sıkıştırılmış paketler içindeki büyüklük ayrıntılarını görürsünüz.
2. Büyük dosyaları tespit etmek için filtreli araçlar
- [i]git rev-list --objects --all | \
grep ""[/i] ile belirli uzantıları ya da isimleri hedefleyebilirsiniz. Örneğin büyük dosyaların kullanıcı olarak hangi isimlerle geçtiğini görmek için otomatik filtreler kurabilirsiniz.
- git log --pretty=format:%H --name-only --diff-filter=A | sort -u | xargs -I{} bash -lc 'git ls-tree -l -- {}' gibi akışlar ile ağaç içindeki dosya boyutlarını karşılaştırabilir, hangi commit’te ne değiştiğini izleyebilirsiniz.
3. Tarihsel analiz için araçlar
- git rev-list --objects --all | git cat-file --batch-check --unpacked | sort -k 3 -nr | head -n 50 gibi iki aşamalı işlemler, commit geçmişinde dosya boyutlarındaki değişimleri zaman içinde haritalamanızı sağlar.
- BFG Repo-Ceeper veya git filter-repo gibi araçlar ile geçmişteki büyük dosyaları temizlemek ve depoyu optimize etmek için güvenli bir yol sağlar. Bu tür işlemler proje geçmişini değiştireceği için ekibin koordineli hareket etmesi gerekir.
4. Pratik bir örnek akış
- Büyük dosya uzantısını hedefleyin: uzantı olarak .bin, .png, .zip gibi dosyalar sık rastlanır.
- Önce büyük nesnelerin hangi commit’lerde olduğuna bakın:
git rev-list --objects --all | grep -E "\.bin$|\.zip$|\.png$" | sort -k 2 -n -r | head -n 20
- Ardından bu commit’leri inceleyin:
[i]git show --
