Por qué los binarios son difíciles
El modelo de almacenamiento de Git está diseñado para texto. Cada commit almacena instantáneas completas de objetos.
Diff y merge
# .gitattributes
*.pdf binary
*.png binary
*.zip binary
Drivers de diff personalizados
# .gitattributes
*.docx diff=docx
*.pdf diff=pdf
# ~/.gitconfig
[diff "docx"]
textconv = pandoc --to=plain
[diff "pdf"]
textconv = pdftotext -layout
Drivers de merge
Algunos formatos binarios pueden mergearse con drivers personalizados. Para la mayoría, marca como merge=ours o merge=binary.
Reducir bloat del repo
- Usa Git LFS para almacenarlos fuera de los archivos pack.
- O genéralos en tiempo de build e ignora la fuente.
- O almacénalos en object storage con un manifiesto en Git.
Rastrear artefactos compilados
# .gitignore
dist/
build/
*.jar
*.class
Cuando los binarios son esenciales
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"
Detectar binarios ya en la historia
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
awk '/^blob/ {print $3, $4}' | \
sort -n | tail -20
Limpiar la historia
git filter-repo --invert-paths --path bigfile.psd
Bloquear archivos binarios
git lfs lock design/logo.psd
git lfs unlock design/logo.psd