是否可以接受用户输入作为远程git post-receive hook的一部分?

时间:2011-10-18 15:12:12

标签: git bash ssh hook tty

每当我们推送master时,我都会有一个post-receive钩子来部署我们的master分支。

我想让部署成为可选的;钩子要求简单的Y / N响应来实现这一点;下面的bash伪代码:

echo "Should I deploy this code now? Enter Y/N"
read deploy_code

case ${deploy_code} in
  "Y") do_a_deploy ;;
  "N") exit ;;
    *) # ask the question again if not Y or N ;;
esac 

由于post-receive钩子在stdin上获取其参数的方式, read 行不会暂停来自用户的输入,并且脚本循环遍历尝试获得Y / N答案。

我认为具体请求来自/dev/tty会解决这个问题;

read deploy_code < /dev/tty

但仍然会导致脚本无休止地循环,因为输入不是来自键盘。

在这种情况下,实际上是否可以获得键盘输入?

修改 啊。看起来它实际上是责备。现在看输出我添加了 < /dev/tty 我看到 / dev / tty:没有这样的设备或地址

如果我在本地运行脚本,我可以模仿这个,但是通过ssh:

ssh 127.0.0.1 "echo 40913e300c8bf4ed7ea91b5ef61a522f3be2c05f e2aabfc865547d8b494b76c96947bab0c62acfec refs/heads/master | /path/to/post-receive"

编辑2:

所以我可以将-t选项设置为ssh以按enabling tty in a ssh session请求tty,或者我可以在每个密钥的基础上在服务器上的authorised_keys文件中启用它

编辑3:

创建〜/ bin / ssh -t

之后
#!/bin/sh
ssh -tt "$@"

(双-t选项强制tty)并设置GIT_SSH指向它,我现在得到可怕的致命:协议错误:坏行长度字符:后面跟着005我在git有机会运行之前,猜测是.bash_profile或类似的回声

1 个答案:

答案 0 :(得分:1)

您也可以解析提交注释。 Git允许空提交。只是另一种选择。