當前位置: 首頁>>技術教程>>正文


Git禁止大文件提交到倉庫中

Git提交的時候,有的時候很容易將目錄下的非源代碼的文件(如二進製文件、模型等)提交到Git倉庫裏,給後續的使用造成麻煩。那麽有沒有一種方法來限製提交到Git的文件的大小呢,答案是Yes,下麵我來大概介紹下吧。

原理是利用Git的鉤子來在commit之前執行一個腳本,在這個腳本裏對提交的文件大小進行檢查。

具體操作是:修改倉庫下的.git/hooks/pre-commit為如下內容(如果沒有這個文件請新建):


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

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

這裏設置了soft_limithard_limit,默認的大小分別是1M和10M,當提交的某個文件超過1M時,會顯示警告;當超過10M時,會顯示錯誤,導致commit失敗。

此外,可以通過git config命令來設置soft_limit和hard_limit的值:


git config hooks.filesizehardlimit 20000000
git config hooks.filesizesoftlimit 2000000

請根據自己的使用情況酌情修改具體的數值。

需要注意的是,.git目錄下的文件Git是沒有跟蹤的,因此在別的電腦或目錄下git clone倉庫後,pre-commit文件並不會被自動clone進來,需要手動添加。

我在GitHub Gist上提交了這個文件,有需要的小夥伴可以直接下載使用。

git大文件

參考資料:
https://stackoverflow.com/questions/39576257/how-to-limit-file-size-on-commit

文章選自:http://vra.github.io/2019/03/10/git-reject-large-file-when-commit/

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4143.html,未經允許,請勿轉載。