3

我已经在本地和我的服务器上设置了 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 之类的能力?

为这个冗长的问题道歉,但我想完全清楚我做了什么。

4

1 回答 1

0

如果您的存储库是使用--shared选项创建的(请参阅“将 GIT 存储库更改为共享”),这将允许来自同一组的用户访问和写入。

有什么方法可以将这些不同的用户分组到同一个组中?
有点像“ Git 无法创建文件权限被拒绝”同一组中提到的内容。
或 sudo 访问,如本问题的评论中所述,更改 sudoers:

 git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom 
于 2013-04-07T11:04:02.747 回答