Pourquoi les binaires sont difficiles
Le modèle de stockage de Git est conçu pour le texte. Chaque commit stocke des instantanés complets.
Diff et merge
# .gitattributes
*.pdf binary
*.png binary
*.zip binary
Drivers de diff personnalisés
# .gitattributes
*.docx diff=docx
*.pdf diff=pdf
# ~/.gitconfig
[diff "docx"]
textconv = pandoc --to=plain
[diff "pdf"]
textconv = pdftotext -layout
Drivers de merge
Certains formats binaires peuvent être mergés avec des drivers personnalisés. Pour la plupart, marquez comme merge=ours ou merge=binary.
Réduire l'enflure du repo
- Utilisez Git LFS pour les stocker hors des packs.
- Ou générez-les au build et ignorez la source.
- Ou stockez-les dans le stockage d'objets avec un manifeste dans Git.
Suivre les artefacts compilés
# .gitignore
dist/
build/
*.jar
*.class
Quand les binaires sont essentiels
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"
Détecter les binaires déjà dans l'historique
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
awk '/^blob/ {print $3, $4}' | \
sort -n | tail -20
Nettoyer l'historique
git filter-repo --invert-paths --path bigfile.psd
Verrouiller des fichiers binaires
git lfs lock design/logo.psd
git lfs unlock design/logo.psd