GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo limitar el tamaño del archivo en la confirmación?

Una versión más corta y específica de bash del script de @Leon, que imprime los tamaños de archivo en un formato legible por humanos. Requiere un git más nuevo para el --diff-filter=d opción:

#!/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

Al igual que con las otras respuestas, esto debe guardarse con permisos de ejecución como .git/hooks/pre-commit .

Salida de ejemplo:

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

Este gancho de confirmación previa hará la verificación del tamaño del archivo:

.git/hooks/precommit

#!/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

La secuencia de comandos anterior debe guardarse como .git/hooks/pre-commit con permisos de ejecución habilitados (chmod +x .git/hooks/pre-commit ).

Los límites de tamaño suave (advertencia) y duro (error) predeterminados se establecen en 500 000 y 10 000 000 bytes, pero se pueden anular a través de hooks.filesizesoftlimit y hooks.filesizehardlimit configuración respectivamente:

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

Linux
  1. Limite el tamaño de carga de archivos en NGINX

  2. Cómo aumentar el límite de tamaño de descarga de archivos en Apache

  3. ¿Cómo crear un archivo con un tamaño determinado en Linux?

  4. ¿Cómo obtener el tamaño físico de un archivo en Linux?

  5. ¿Cómo comprimir archivos con un límite de tamaño?

¿Cómo funciona Git?

Git Revert Commit:cómo deshacer la última confirmación

Cómo deshacer la última confirmación en Git

Cómo cambiar el límite de archivos abiertos en Linux

Cómo limitar la profundidad del 'árbol' para el listado de archivos recursivos

Cómo:una introducción al uso de Git