首先这个不是pack太大的问题,还是本地仓库里面有超出远程限制大小的文件
但是文件多的时候不容易发现。
查找一个文件夹中大于500M文件的命令:
$ find ./ -type f -size +500M
然后有两种办法:
一种就是删除 .git 目录,重新建立
一种是重写所有涉及大文件的历史版本(网上搜下很多)
这个和压缩 pack 的大小无关,但是感觉只有一个大pack也不好,似乎每次都要上传很久
git config pack.packSizeLimit 200m
最好的办法是预防为主:本地仓库就不让有大文件
修改仓库下的.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