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

向群晖Synology git服务器推送新仓库无需预先SSH创建裸仓库问题求助

解决方案

方案1:Git命令代理脚本(原生Git套件可用,无需额外装软件)

这个方案完全保留你当前的Git使用方式,同时关闭用户交互式SSH权限,实现推送自动创建裸仓库:

  1. 编写Git命令代理脚本
    登录你的群晖SSH(仅本次配置操作需要,配置完成后普通用户无法进行交互式SSH登录),切换到你的Git用户,在家目录下创建git-command-proxy.sh,内容如下:
#!/bin/sh
# 解析Git请求命令与仓库路径
GIT_OP=$(echo "$SSH_ORIGINAL_COMMAND" | awk '{print $1}')
RAW_REPO=$(echo "$SSH_ORIGINAL_COMMAND" | awk '{print $2}' | sed "s/'//g")
# 替换为你实际的仓库存储根目录,这里示例用家目录下的git目录
FULL_REPO="$HOME/git/$RAW_REPO"

# 仅对推送操作且仓库不存在的场景自动创建裸仓库
if [ "$GIT_OP" = "git-receive-pack" ] && [ ! -d "$FULL_REPO" ]; then
    mkdir -p "$FULL_REPO"
    cd "$FULL_REPO"
    git init --bare --quiet
    # 按需调整权限,这里设置为用户本人读写、同组用户可读写
    chmod -R 770 "$FULL_REPO"
fi

# 执行原始Git请求
exec $SSH_ORIGINAL_COMMAND

给脚本添加执行权限:

chmod 755 ~/git-command-proxy.sh
  1. 配置SSH公钥强制调用代理
    编辑Git用户家目录下的~/.ssh/authorized_keys文件,在每个允许访问的公钥行前添加强制命令与权限限制参数,修改后的格式如下:
command="/var/services/homes/你的Git用户名/git-command-proxy.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty 你的公钥内容 公钥备注
  • 其中command后的路径替换为你刚才创建的脚本的绝对路径
  • 末尾的no-pty参数会禁止该公钥对应的用户开启交互式SSH会话,完全满足你的权限要求

配置完成后,本地无需提前在服务端创建仓库,直接执行git remote add、git push命令即可自动触发服务端创建对应的裸仓库。

方案2:部署轻量Git托管服务(适合多用户、需要更多权限控制的场景)

如果需要更完善的Git管理能力,可直接在群晖社群套件源中安装Gitea:

  • Gitea是轻量级的自托管Git服务,自带Web管理界面,支持用户权限管理、仓库自动创建、提交日志查看等功能
  • 无需手动执行裸仓库创建命令,用户在Web界面点击创建仓库、或者直接按规则推送即可生成对应仓库

注意事项

  • 请确保Git用户对仓库存储根目录(也就是你之前的~/git目录)拥有读写执行权限
  • 若群晖升级Git套件后出现异常,可检查git-receive-pack等命令的路径是否正常,重新设置脚本执行权限即可

内容的提问来源于stack exchange,提问作者theheadofabroom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:18:00