You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过git-daemon拒绝特定仓库的浅克隆/浅拉取请求?

如何通过git-daemon拒绝特定仓库的浅克隆/浅拉取请求?

好问题!git daemon本身确实没有直接的内置配置项来拒绝特定仓库的浅克隆/浅拉取请求,但我们可以通过自定义upload-pack包装脚本的方式来实现这个需求——毕竟git daemon在处理克隆/拉取请求时,会调用git-upload-pack程序和客户端交互,我们可以把这个程序替换成自己的脚本,在里面做仓库判断和浅请求拦截。

下面是具体的实现步骤:

1. 编写自定义的upload-pack包装脚本

创建一个脚本文件,比如/usr/local/bin/git-upload-pack-wrapper,内容如下:

#!/bin/bash

# 获取git daemon传递的当前仓库绝对路径
REPO_PATH="$1"

# 定义需要禁止浅克隆的仓库列表(替换成你实际的仓库路径)
FORBIDDEN_REPOS=(
    "/srv/git/platform/frameworks/base.git"
    "/srv/git/platform/packages/apps/Settings.git"
    # 继续添加其他需要限制的仓库路径
)

# 检查当前请求的仓库是否在禁止列表中
for repo in "${FORBIDDEN_REPOS[@]}"; do
    if [ "$REPO_PATH" = "$repo" ]; then
        # 检查客户端是否发起浅请求:现代Git客户端(2.18+)会在GIT_PROTOCOL中携带shallow标识
        if [[ "$GIT_PROTOCOL" == *"shallow"* ]]; then
            echo "Error: Shallow clones/fetches are not allowed for this repository." >&2
            exit 1
        fi
        # 如果需要兼容旧版本Git,可以进一步读取标准输入的请求内容,检查是否包含shallow/deepen指令
        # 不过对于公共镜像来说,现代客户端占比很高,用GIT_PROTOCOL基本足够覆盖需求
        break
    fi
done

# 若不在禁止列表或无浅请求,调用真正的git-upload-pack处理请求
exec /usr/lib/git-core/git-upload-pack "$@"

给脚本添加执行权限:

chmod +x /usr/local/bin/git-upload-pack-wrapper

2. 修改git daemon的systemd配置

打开你的git daemon服务配置文件,修改ExecStart行,添加--upload-pack参数指定我们的包装脚本:

原来的配置:

ExecStart=/usr/lib/git-core/git-daemon --user=gitdaemon --reuseaddr --verbose --export-all --forbid-override=receive-pack --timeout=180 --max-connections=32 --base-path=/srv/git

修改后:

ExecStart=/usr/lib/git-core/git-daemon --user=gitdaemon --reuseaddr --verbose --export-all --forbid-override=receive-pack --timeout=180 --max-connections=32 --base-path=/srv/git --upload-pack=/usr/local/bin/git-upload-pack-wrapper

3. 重启git daemon服务

应用配置更改并重启服务:

systemctl daemon-reload
systemctl restart git-daemon.service

额外说明

  • 测试效果:你可以用git clone --depth 1 http://your-mirror-url/platform/frameworks/base.git来测试,应该会收到我们脚本里定义的错误提示,无法完成浅克隆。
  • 配合你的内存限制:禁止浅克隆后,能减少git daemon处理大量零散小对象的压力,再加上你已经配置的MemoryMax和MemoryHigh,应该能有效缓解之前的CPU和内存占用问题。

备注:内容来源于stack exchange,提问作者iBug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:33:01