Warum Binaries schwierig sind
Git's Storage-Modell ist fur Text designt.
Diff und Merge
# .gitattributes
*.pdf binary
*.png binary
*.zip binary
Benutzerdefinierte Diff-Treiber
# .gitattributes
*.docx diff=docx
*.pdf diff=pdf
# ~/.gitconfig
[diff "docx"]
textconv = pandoc --to=plain
[diff "pdf"]
textconv = pdftotext -layout
Merge-Treiber
Fur die meisten Bilder, Audio und Video ist "Merge" bedeutungslos.
Repo-Bloat reduzieren
- Git LFS verwenden.
- Zur Build-Zeit generieren.
- In Object Storage speichern.
Compilierte Artefakte tracken
# .gitignore
dist/
build/
*.jar
*.class
Wenn Binaries essenziell sind
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"
Bereits in Historie befindliche Binaries erkennen
git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
awk '/^blob/ {print $3, $4}' | \
sort -n | tail -20
Historie aufraumen
git filter-repo --invert-paths --path bigfile.psd
Binare Dateien sperren
git lfs lock design/logo.psd
git lfs unlock design/logo.psd