Perche i binari sono difficili
Il modello di storage di Git e progettato per il testo. Modifica un'immagine da 50 MB una volta e hai aggiunto 50 MB al repo.
Diff e merge
# .gitattributes
*.pdf binary
*.png binary
*.zip binary
Driver diff personalizzati
# .gitattributes
*.docx diff=docx
*.pdf diff=pdf
# ~/.gitconfig
[diff "docx"]
textconv = pandoc --to=plain
[diff "pdf"]
textconv = pdftotext -layout
Driver di merge
Per la maggior parte di immagini, audio e video, "merge" e privo di senso.
Ridurre il bloat del repo
- Usare Git LFS.
- Generare al build time.
- Memorizzare in object storage.
Tracciare artefatti compilati
# .gitignore
dist/
build/
*.jar
*.class
Quando i binari sono essenziali
git lfs install
git lfs track "*.psd"
git lfs track "models/*.bin"
git add .gitattributes
git commit -m "Track design and model files via LFS"
Rilevare binari gia in storia
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
awk '/^blob/ {print $3, $4}' | \
sort -n | tail -20
Pulire la storia
git filter-repo --invert-paths --path bigfile.psd
Lock di file binari
git lfs lock design/logo.psd
git lfs unlock design/logo.psd