Git ne permet pas d’ignorer automatiquement les fichiers selon leur poids directement depuis .gitignore. En revanche, on peut lister les fichiers déjà présents dans le projet qui dépassent une certaine taille, puis ajouter leurs chemins au fichier .gitignore.
La commande suivante ajoute tous les fichiers de plus de 1 Mo au .gitignore, en excluant le dossier .git :
bash find . -path ./.git -prune -o -type f -size +1M -print | sed 's#^./##' >> .gitignore
Explication rapide :
- find . cherche depuis le dossier courant ;
- -path ./.git -prune ignore le dossier .git ;
- -type f limite la recherche aux fichiers ;
- -size +1M cible les fichiers de plus de 1 Mo ;
- sed ‘s#^./##’ supprime le ./ au début des chemins ;
- >> .gitignore ajoute le résultat à la fin du fichier .gitignore.
Exemple de ligne ajoutée :
gitignore uploads/archive.zip
Attention : si un fichier est déjà suivi par Git, l’ajouter au .gitignore ne suffit pas. Il faudra aussi le retirer de l’index avec :
bash git rm --cached chemin/du/fichier
Si vous avez déjà des règles d’exclusion, par exemple si vous excluez déjà tous les fichiers PDF, les logs ou autres, vous ne souhaitez pas que le script liste des fichiers déjà exclus. Dans ce cas, exécutez ce code qui teste chaque fichier avec git check-ignore avant de l’ajouter.
find . -path ./.git -prune -o -type f -size +1M -print0 |
while IFS= read -r -d '' file; do
git check-ignore -q "$file" || printf '%s\n' "${file#./}" >> .gitignore
done
Uniquement les images (ici de plus de 500k)
printf '\n# Fichiers volumineux ajoutés automatiquement - images de plus de 500 Ko\n' >> .gitignore
find . -path ./.git -prune -o \
-type f -size +500k \
\( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.webp" -o -iname "*.avif" \) \
-print0 |
while IFS= read -r -d '' file; do
git check-ignore -q "$file" || printf '%s\n' "${file#./}" >> .gitignore
done
Laisser un commentaire