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

Bonobo Git Server 6.3钩子异常及分支权限控制求助

解决Bonobo Git Server钩子问题:pre-receive拒推、pre-push不生效

先给你理清几个关键问题,再给你钩子脚本的正确写法和配置排查方向:

一、为什么空的pre-receive文件直接提示“pre receive hook declined”?

在Windows环境下的Bonobo Git Server中,无扩展名的钩子脚本会被Git默认用cmd解释器执行,但空脚本的退出码不是0(Git钩子要求返回0才允许操作,非0则拒绝),所以直接触发拒推。

解决这个问题的第一步是给pre-receive脚本加上正确的扩展名(比如.cmd或者.ps1),然后编写逻辑确保通过检查时返回exit /b 0。

示例:限制特定用户推送特定分支的pre-receive.cmd脚本

@echo off
:: 读取Git传入的三个参数:旧提交ID、新提交ID、目标分支
set OLD_REV=%1
set NEW_REV=%2
set BRANCH=%3

:: 配置要限制的分支(注意格式是refs/heads/分支名,比如main就是refs/heads/main)
set RESTRICTED_BRANCH=refs/heads/main
:: 配置允许推送的用户名(要和Bonobo中用户的登录名一致)
set ALLOWED_USER=admin

:: 先确认当前推送用户的环境变量——Bonobo会把登录用户放在REMOTE_USER或USERNAME变量里
:: 可以先加这行输出环境变量到日志,确认哪个变量对应登录用户
:: set > C:\temp\bonobo_hook_env.log

set CURRENT_USER=%REMOTE_USER%

:: 判断是否是要限制的分支
if /i "%BRANCH%"=="%RESTRICTED_BRANCH%" (
    :: 判断当前用户是否在允许列表
    if /i "%CURRENT_USER%" neq "%ALLOWED_USER%" (
        echo 错误:你没有权限推送至%RESTRICTED_BRANCH%分支
        exit /b 1  :: 返回非0,拒绝推送
    )
)

:: 所有检查通过,允许推送
exit /b 0

使用说明:

  1. 把脚本保存为pre-receive.cmd,放到你的Bonobo仓库的hooks目录下(路径一般是C:\Bonobo.Git.Server\App_Data\Repositories\[你的仓库名]\hooks)。
  2. 先取消注释set > C:\temp\bonobo_hook_env.log这行,推送一次后查看日志,确认CURRENT_USER对应的变量名是否正确(比如有些环境下是USERNAME),然后替换脚本里的%REMOTE_USER%。
  3. 脚本编码要保存为ANSI,避免UTF-8带BOM导致执行乱码。

二、为什么pre-push脚本完全不生效?

这里有个核心误区:pre-push是Git客户端钩子,它只能放在本地开发者的Git仓库.git/hooks目录下,在用户执行git push时在本地触发。服务器端的Bonobo仓库hooks目录里放pre-push脚本是完全没用的——服务器端根本不会执行这个钩子!

如果你要在服务器端限制推送行为,应该用pre-receive或者update钩子(后者可以针对单个分支更精细控制),而不是pre-push。

三、环境配置排查要点

  1. 权限检查:确保Bonobo的App_Data文件夹(包括下属的Repositories和hooks目录)给了IIS应用池身份(比如IIS AppPool\BonoboGitServer)读取和执行权限——Bonobo运行在IIS应用池下,必须能读取并执行钩子脚本。
  2. 匿名推送设置:你勾选了匿名访问但禁用匿名推送,所以用户推送时必须先登录Bonobo,钩子才能拿到正确的用户信息。如果钩子里拿不到用户变量,检查Bonobo的身份验证配置是否正常(比如是否启用了表单认证)。
  3. 脚本测试:可以在服务器上手动运行脚本,传入三个测试参数(比如pre-receive.cmd abc123 def456 refs/heads/main),看是否能正确返回0或1,以及输出是否符合预期,排查脚本本身的语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:38