GNU/Linux >> Tutoriels Linux >  >> Linux

Comment limiter la taille du fichier lors de la validation ?

Une version plus courte et spécifique à bash du script de @Leon, qui imprime les tailles de fichier dans un format lisible par l'homme. Cela nécessite un git plus récent pour le --diff-filter=d choix :

#!/bin/bash
hard_limit=$(git config hooks.filesizehardlimit)
soft_limit=$(git config hooks.filesizesoftlimit)
: ${hard_limit:=10000000}
: ${soft_limit:=1000000}

status=0

bytesToHuman() {
  b=${1:-0}; d=''; s=0; S=({,K,M,G,T,P,E,Z,Y}B)
  while ((b > 1000)); do
    d="$(printf ".%01d" $((b % 1000 * 10 / 1000)))"
    b=$((b / 1000))
    let s++
  done
  echo "$b$d${S[$s]}"
}

# Iterate over the zero-delimited list of staged files.
while IFS= read -r -d '' file ; do
  hash=$(git ls-files -s "$file" | cut -d ' ' -f 2)
  size=$(git cat-file -s "$hash")

  if (( $size > $hard_limit )); then
    echo "Error: Cannot commit '$file' because it is $(bytesToHuman $size), which exceeds the hard size limit of $(bytesToHuman $hard_limit)."
    status=1
  elif (( $size > $soft_limit )); then
    echo "Warning: '$file' is $(bytesToHuman $size), which exceeds the soft size limit of $(bytesToHuman $soft_limit). Please double check that you intended to commit this file."
  fi
done < <(git diff -z --staged --name-only --diff-filter=d)
exit $status

Comme pour les autres réponses, cela doit être enregistré avec les autorisations d'exécution en tant que .git/hooks/pre-commit .

Exemple de sortie :

Error: Cannot commit 'foo' because it is 117.9MB, which exceeds the hard size limit of 10.0MB.

Ce hook de pré-commit fera la vérification de la taille du fichier :

.git/hooks/pre-commit

#!/bin/sh
hard_limit=$(git config hooks.filesizehardlimit)
soft_limit=$(git config hooks.filesizesoftlimit)
: ${hard_limit:=10000000}
: ${soft_limit:=500000}

list_new_or_modified_files()
{
    git diff --staged --name-status|sed -e '/^D/ d; /^D/! s/.\s\+//'
}

unmunge()
{
    local result="${1#\"}"
    result="${result%\"}"
    env echo -e "$result"
}

check_file_size()
{
    n=0
    while read -r munged_filename
    do
        f="$(unmunge "$munged_filename")"
        h=$(git ls-files -s "$f"|cut -d' ' -f 2)
        s=$(git cat-file -s "$h")
        if [ "$s" -gt $hard_limit ]
        then
            env echo -E 1>&2 "ERROR: hard size limit ($hard_limit) exceeded: $munged_filename ($s)"
            n=$((n+1))
        elif [ "$s" -gt $soft_limit ]
        then
            env echo -E 1>&2 "WARNING: soft size limit ($soft_limit) exceeded: $munged_filename ($s)"
        fi
    done

    [ $n -eq 0 ]
}

list_new_or_modified_files | check_file_size

Le script ci-dessus doit être enregistré sous .git/hooks/pre-commit avec les permissions d'exécution activées (chmod +x .git/hooks/pre-commit ).

Les limites de taille logicielle (avertissement) et matérielle (erreur) par défaut sont définies sur 500 000 et 10 000 000 octets, mais peuvent être remplacées par le hooks.filesizesoftlimit et hooks.filesizehardlimit paramètres respectivement :

$ git config hooks.filesizesoftlimit 100000
$ git config hooks.filesizehardlimit 4000000

Linux
  1. Comment définir la limite de taille de téléchargement de fichier dans Apache ?

  2. Limiter la taille de téléchargement des fichiers dans NGINX

  3. Comment augmenter la limite de taille de téléchargement de fichiers dans Apache

  4. Comment créer un fichier avec une taille donnée sous Linux ?

  5. Comment obtenir la taille de tar.gz dans le fichier (Mo) en python

Comment fonctionne Git ?

Git Revert Commit :Comment annuler le dernier commit

Comment annuler le dernier commit dans Git

Comment changer la limite de fichiers ouverts sous Linux

Comment limiter la profondeur de «l'arborescence» pour la liste de fichiers récursifs

Comment :une introduction à l'utilisation de Git