Versioning avec Git & GitHub · Étape 23

Gère fichiers volumineux, binaires et artefacts

Décide ce qui appartient à l’historique, ignore les sorties reproductibles et utilise un stockage d’artefacts ou Git LFS seulement lorsqu’un binaire doit réellement être versionné.

Durée indicative · ~1 h 25Niveau intermédiairePrérequis conseillé · Leçon 22 — réponse à une exposition de secretPratique · TP
L’idée reçue

« Si un fichier appartient au projet, il doit être committé. »

Le dépôt conserve les sources et les décisions. Beaucoup de fichiers nécessaires à l’exécution doivent être reconstruits, téléchargés ou restaurés depuis un stockage spécialisé.

01Classe avant d’ajouter

Catégorie
Exemple
Destination
Source
script, manifest, documentation
Git
Dépendance
package npm, image de base
lockfile + registre
Artefact
archive, image OCI, binaire compilé
registre ou release
Runtime
log, cache, fichier temporaire
stockage d’exécution
Donnée lourde
ISO, qcow2, dataset
objet, catalogue ou LFS évalué

02Observe l’impact sur Git

git count-objects -vH
git rev-list --objects --all \
  | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
  | sort -k3nr \
  | head

Une suppression ultérieure ne retire pas le blob des commits précédents. Les fichiers lourds augmentent clone, fetch, sauvegarde et maintenance.

03Ignore les sorties reproductibles

dist/
artifacts/
*.log
*.iso
*.qcow2
.cache/
git check-ignore -v dist/app.tar.gz
git status --ignored --short
git ls-files dist artifacts

.gitignore n’agit pas sur un fichier déjà suivi. Retire-le de l’index avec une décision explicite et conserve la source qui permet de le reconstruire.

04Décris les binaires

*.png binary
*.zip binary
*.pdf binary

Cette déclaration évite des diffs texte inutiles. Elle ne déplace pas le fichier vers un autre stockage et ne réduit pas sa taille historique.

05Comprends Git LFS

git lfs install
git lfs track '*.psd'
git add .gitattributes design/example.psd
git commit -m "design: add versioned source asset"
Dans Git : petit fichier pointeur
Dans LFS : contenu binaire correspondant à l’OID

Avant adoption, vérifie disponibilité, quotas, archivage, sauvegarde, restauration, droits et comportement des forks ou pipelines.

06Utilise le bon registre

Image OCI          Harbor / registre d’images
Package            registre npm, PyPI, Maven…
Archive de release GitHub Release / stockage objet
Artefact CI        stockage du pipeline avec rétention
Backup             dépôt de sauvegarde, jamais Git

Un registre gère versions, métadonnées, politiques de rétention et parfois signature ou vulnérabilités. Git conserve le manifest et la référence immuable.

07Versionne la recette, pas la sortie

# suivi
Dockerfile
package-lock.json
scripts/build.sh

# non suivi
dist/application.tar.gz
node_modules/
coverage/

La CI doit pouvoir reproduire l’artefact à partir du commit et des dépendances verrouillées. Conserve ensuite checksum, provenance et durée de rétention.

08Traite un gros fichier déjà committé

1. Bloquer les nouveaux pushes concernés.
2. Décider s’il faut seulement arrêter le suivi ou réécrire.
3. Migrer vers le stockage choisi.
4. Mettre à jour références et documentation.
5. Valider clones et pipelines.
6. Coordonner la réécriture si elle est nécessaire.

La procédure rejoint alors les risques de la leçon précédente : changement de SHA, force updates et clones anciens.

Mission

Écris la politique d’artefacts

À partir du lab, classe chaque fichier du projet PME. Justifie Git, ignore, release, Harbor, stockage objet ou sauvegarde, puis définis rétention et restauration.

À retenir

Git doit rester un historique de sources et de décisions. Un binaire n’y entre que si sa valeur de versionnement justifie durablement le coût de stockage, de transfert et de gouvernance.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.