我在本地和我的服务器上设置了git并创建了一个'post-receive',这样当我推送到实时服务器时,它应该检查到网站的虚拟主机目录。
#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f
但是,当我尝试执行推送时,它会成功地运行主服务器,但是当我尝试在服务器Web根目录上创建这些文件时,我获得了权限被拒绝的错误。
e.g。 remote: error: unable to create file index.php (Permission denied)
由于我设置服务器的方式,这些错误实际上对我有意义。我禁用了root访问权限并创建了一个通过visudo添加到sudoers的新用户 - 然后我为该用户设置了SSH密钥。我使用这个用户将我的git更改推送到服务器。
我相信问题是,我连接到push的这个用户没有权限写入虚拟主机目录。这些文件夹中的所有文件都由拥有相同组的www-data(我的nginx用户)拥有。
解决方案是什么?使用SSH密钥创建另一个用户,只为具有更高权限的git连接,或者是否有办法授予后接收sudo这样的能力?
对这个冗长的问题抱歉道歉,但希望对我的所作所为充满信心。
答案 0 :(得分:0)
如果您的repo是使用--shared
选项创建的(请参阅“Change GIT repository to shared”),那么相同组的用户可以访问和写入。
有没有办法可以将同一组中的不同用户分组? 有点像“Git unable to create file permission denied”同组中提到的那样 或者sudo访问,正如this question的评论中所解释的那样,改变了sudoers:
git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom