2013-04-07 99 views
3

我在本地和我的服务器上设置了git,并创建了一个'post-receive',这样当我推送到活动服务器时,它应该检出到网站的虚拟主机目录。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更改到服务器。

问题是,我相信我连接推送的这个用户没有写入虚拟主机目录的权限。这些文件夹中的所有文件都由具有相同组的www-data(我的nginx用户)拥有。

解决方案是什么?使用SSH密钥创建另一个用户来连接具有更高权限的git,或者有办法像授予能力那样授予接收后的sudo?

对于这个漫长而啰嗦的问题抱歉,但想要完全清楚我所做的。

回答

0

如果你的回购与--shared选项创建(见“Change GIT repository to shared”),这将允许从同组用户访问和写入。

有什么办法可以将同一组中的不同用户分组吗?
有点像“Git unable to create file permission denied”同一组中提到的那样。
或sud​​o访问,在this question的意见作为解释,改变sudoers的:

git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom 
+0

感谢您的答复。但要清楚的是,我没有任何问题推到服务器上的回购站,当post-receive试图将文件复制到我遇到的问题的web根目录时。那里的文件由www-data拥有,以便Web服务器可以写入/正确运行它们。例如从管理员添加插件。 – bbish007 2013-04-07 17:44:34

+0

此外,它是我用来使用ssh推送远程的用户,它不具有复制和覆盖Web根目录中文件的权限。我觉得我正在俯视一些明显的东西! – bbish007 2013-04-07 17:46:27

+0

@ bbish007唯一可以帮助的事情(除了使用sudo权限执行命令之外)是让该用户与web根目录中的文件组在同一组中。 – VonC 2013-04-07 17:49:10