因此,我不想将ACL放在git预接收挂钩中,而只是想向我的项目中推入主分支(也恰好是我的发布分支)的任何人发送确认消息(y / n)
这样的东西适用于客户端钩子,但我不确定如何在服务器端实现这一点:
while true; do
read -p "[pre-commit hook] Really want to commit into master? (Y/n) " yn
if [ "$yn" = "" ]; then
yn='Y'
fi
case $yn in
[Yy] ) exit 0; break;;
[Nn] ) exit 1;;
* ) echo "Please answer y or n for yes or no.";;
esac
done
(此片段取自stackoverflow答案,我稍后将在评论部分中提供的链接)
如何使用预接收服务器端挂钩执行此类操作?
谢谢!
答案 0 :(得分:2)
作为Zeeker suggested in a comment,您无法在服务器挂钩中执行此操作:它没有返回给用户的输入连接(所述用户可能正在使用ssh通过git ssh://
URL连接,但是ssh并没有以任何方式挂在他或她的键盘上。)
在预接收挂钩的特定情况下,标准输入连接到管道, 1 其写入端连接到产生 oldsha1 newsha1 refname <的命令/ em>元组(每行一个)。更新钩子的标准输入连接到/dev/null
(或道德等效,取决于系统)。没有控制终端,因此也无法打开/dev/tty
。
1 我编写了一个程序,将管道数据复制到临时文件,然后使用来自临时文件的输入运行一个或多个辅助挂钩,其中每个挂钩的搜索偏移重置为0单独的钩子。这允许使用多个钩子,其中任何一个钩子都可以拒绝更新。管道方法很烦人,因为一旦一个钩子消耗了所有输入,它就无法链接到第二个钩子,因为输入全部消失了。