我在我的服务器上托管git并拥有运行
等命令的webhookbranch=$(expr "$refname" : "refs/heads/\(.*\)")
这与SSH git推送完美配合,但在尝试使用HTTPS协议时,我收到错误
hooks/pre-receive: expr: not found
我想这是因为使用https时脚本作为www-data运行。
任何想法如何解决这个问题?
答案 0 :(得分:0)
如果这是同一台服务器,则应该检查从HTTP服务器调用此挂钩时是否正确设置了PATH
环境变量;它可能会丢失/bin
或/usr/bin
(无论哪个存储您的expr
命令)。
那就是说,这里根本不需要expr
。假设$refname
中的值以refs/heads
开头:
# Delete the leading refs/heads/ from refname to get branch
branch=${refname#refs/heads/}
否则:
# Delete everything up to and including the first instance of refs/heads/
branch=${refname#*refs/heads/}
如果您想检查refname
是否包含refs/heads/
,则最容易在bash中完成此操作(您的脚本以#!/bin/bash
开头):
if [[ $refname = *refs/heads/ ]]; then
branch=${refname#*/refs/heads/}
else
# refname does not match the pattern
branch=
fi
如果你实际上正在使用bash,你实际上可以使用更相似的代码:
refname_re='refs/heads/(.*)'
if [[ $refname =~ $refname_re ]]; then
branch=${BASH_REMATCH[1]}
fi