GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie beschränke ich die Dateigröße beim Commit?

Eine kürzere, Bash-spezifische Version des Skripts von @Leon, die die Dateigrößen in einem für Menschen lesbaren Format druckt. Es erfordert ein neueres Git für --diff-filter=d Möglichkeit:

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

Wie bei den anderen Antworten muss dies mit Ausführungsberechtigungen als .git/hooks/pre-commit gespeichert werden .

Beispielausgabe:

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

Dieser Pre-Commit-Hook führt die Dateigrößenprüfung durch:

.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

Obiges Skript muss als .git/hooks/pre-commit gespeichert werden mit aktivierten Ausführungsberechtigungen (chmod +x .git/hooks/pre-commit ).

Die standardmäßigen weichen (Warnung) und harten (Fehler) Größenbeschränkungen sind auf 500.000 und 10.000.000 Byte festgelegt, können aber durch hooks.filesizesoftlimit überschrieben werden und hooks.filesizehardlimit Einstellungen bzw.:

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

Linux
  1. So erhöhen Sie die Datei-Download-Größenbeschränkung in Apache

  2. So zeigen Sie Dateigröße/-details über den Befehl ls in Unix an

  3. Wie erstelle ich eine Datei mit einer bestimmten Größe in Linux?

  4. Wie schneide ich eine Datei unter Linux auf eine bestimmte Größe?

  5. Wie erhalte ich die physische Größe einer Datei unter Linux?

Wie funktioniert Git?

Git Revert Commit:So machen Sie den letzten Commit rückgängig

So machen Sie den letzten Commit in Git rückgängig

So ändern Sie das Limit für offene Dateien in Linux

So begrenzen Sie die Tiefe des „Baums“ für die rekursive Dateiauflistung

Gewusst wie:Eine Einführung in die Verwendung von Git