GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara membatasi ukuran file saat komit?

Versi skrip @Leon yang lebih pendek dan khusus bash, yang mencetak ukuran file dalam format yang dapat dibaca manusia. Ini membutuhkan git yang lebih baru untuk --diff-filter=d opsi:

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

Seperti jawaban lainnya, ini harus disimpan dengan mengeksekusi izin sebagai .git/hooks/pre-commit .

Contoh keluaran:

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

Pengait pra-komitmen ini akan melakukan pemeriksaan ukuran file:

.git/hooks/pra-komit

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

Skrip di atas harus disimpan sebagai .git/hooks/pre-commit dengan izin eksekusi diaktifkan (chmod +x .git/hooks/pre-commit ).

Batas ukuran lunak (peringatan) dan keras (kesalahan) default diatur ke 500.000 dan 10.000.000 byte tetapi dapat diganti melalui hooks.filesizesoftlimit dan hooks.filesizehardlimit pengaturan masing-masing:

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

Linux
  1. Cara Meningkatkan Ukuran Swap di Ubuntu Linux

  2. Batasi Ukuran Unggah File di NGINX

  3. Bagaimana cara memotong file ke ukuran tertentu di Linux?

  1. Bagaimana cara mengatur batas Ukuran Unggah File di Apache?

  2. Cara Meningkatkan Batas Ukuran Unduhan File di Apache

  3. Bagaimana cara mendapatkan ukuran fisik file di Linux?

  1. Cara melihat ukuran/detail file dari perintah ls di Unix

  2. Bagaimana cara membuat file dengan ukuran tertentu di Linux?

  3. Cara mendapatkan ukuran file tar.gz dalam (MB) dengan python