我已经在本地和我的服务器上设置了 git,并创建了一个“post-receive”,这样当我推送到实时服务器时,它应该检查到网站的虚拟主机目录。
#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f
但是,当我尝试进行推送时,它会成功退出主服务器,但尝试在服务器 Web 根目录上创建这些文件时出现权限被拒绝错误。
例如remote: error: unable to create file index.php (Permission denied)
由于我设置服务器的方式,这些错误对我来说实际上是有意义的。我禁用了 root 访问并创建了一个通过 visudo 添加到 sudoers 的新用户——然后我为这个用户设置了 SSH 密钥。我使用此用户将我的 git 更改推送到服务器。
我认为,问题是我连接到 push 的这个用户没有写入虚拟主机目录的权限。我在这些文件夹中的所有文件都归同一个组的 www-data(我的 nginx 用户)所有。
解决办法是什么?使用 SSH 密钥创建另一个用户以仅用于具有更高权限的 git 连接,或者有没有办法授予 post-receive sudo 之类的能力?
为这个冗长的问题道歉,但我想完全清楚我做了什么。