git拦截大于5M文件

1)路径

复制代码
root@slm-server:/data/gitea/data/data/repositories/wbs/test_larget_file.git# pwd
/data/gitea/data/data/repositories/wbs/test_larget_file.git

2)执行下

root@slm-server:/data/gitea/data/data/repositories/wbs/test_larget_file.git# vim hooks/pre-receive.d/check-file-size

复制代码
#!/bin/bash

# 设置最大文件大小为 5MB (5 * 1024 * 1024 = 5242880 字节)
MAX_FILE_SIZE=5242880
ZERO_COMMIT="0000000000000000000000000000000000000000"

while read oldrev newrev refname; do
    # 处理分支删除(跳过)
    if [ "$newrev" = "$ZERO_COMMIT" ]; then
        continue
    fi

    # 确定要检查的提交范围
    if [ "$oldrev" = "$ZERO_COMMIT" ]; then
        # 新分支:检查所有提交
        range="$newrev"
    else
        # 已有分支:检查新增的提交
        range="$oldrev..$newrev"
    fi

    # 遍历范围内的每个提交
    for commit in $(git rev-list "$range"); do
        # 获取该提交中的所有文件
        files=$(git diff-tree --no-commit-id --name-only -r "$commit")
        for file in $files; do
            # 获取文件在提交中的大小(字节)
            file_size=$(git cat-file -s "$commit:$file" 2>/dev/null || echo 0)
            if [ "$file_size" -gt "$MAX_FILE_SIZE" ]; then
                echo "❌ 错误:提交 $commit 中的文件 '$file' 大小超过限制 ($((file_size/1024/1024))MB > 5MB)" >&2
                echo "💡 提示:请使用 Git LFS 管理大文件,或从提交中移除该文件" >&2
                exit 1
            fi
        done
    done
done

exit 0

3)加权限

复制代码
root@slm-server:/data/gitea/data/data/repositories/wbs/test_larget_file.git# chmod +x hooks/pre-receive.d/check-file-size
root@slm-server:/data/gitea/data/data/repositories/wbs/test_larget_file.git# chown gitea:gitea hooks/pre-receive.d/check-file-size

4)测试

复制代码
dd if=/dev/zero of=test30m.bin bs=1M count=30
git add test10m.bin
git commit -m "test 30mb"
git push
相关推荐
7177771 小时前
Git自建用什么工具比较好:Gitea、Forgejo、GitLab CE与Gitee的选型对比
git·gitlab·gitea
lsc_blog20 小时前
年底还在招的岗位,先确认缺口和到岗要求
git·缓存·ci/cd·职场和发展·github
全栈陈序员1 天前
【Git】从入门到精通(十一)—— git reset 三种模式详解
git·elasticsearch
全栈陈序员1 天前
【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore
运维·网络·数据库·git
全栈陈序员1 天前
【Git】从入门到精通(五)—— git add:将文件加入暂存区
大数据·git·elasticsearch
全栈陈序员2 天前
【Git】从入门到精通(七)—— git status:查看仓库状态
大数据·git·elasticsearch
莫晓燚2 天前
Ansible 13 个常用模块---企业实战
git·github
无言听风雨丶2 天前
Kubernetes GitOps 持续交付实战:用 Argo CD 让 Git 成为集群事实源
git·elasticsearch·kubernetes
全栈陈序员2 天前
【Git】从入门到精通(六)—— git commit:提交到版本库
大数据·git·elasticsearch
全栈陈序员3 天前
【Git】从入门到精通(一)—— Git简介:什么是版本控制系统
大数据·git·elasticsearch