每当推送git远程存储库时,我都无法更新Web服务器root。问题如下:
我创建了一个文件update.php
,它从远程仓库执行git pull
,它可以工作(如果我在推送到远程仓库后,通过网络浏览器访问http://www.mydomain.com/update.php ,Web服务器中的内容是最新的。
我在remote-repo中创建了一个文件.git/hooks/post-receive
来访问update.php
,并通过从终端执行它来检查它是否可以手动工作(Web服务器中的内容是最新的)再次)。
但是当我将提交从local-repo推送到remote-repo时,.git/hooks/post-receive
不会自动触发。
当推送远程仓库时,post-receive
是否应该被自动调用?我很想知道问题是什么......我知道它已经与许可事件无关但我在网上尝试了所有改变许可的解决方案(当然,没有任何效果)。
post-receive
- 脚本:cd ..
env -i git reset --hard
为什么post-receive
- 脚本不会自动触发?
答案 0 :(得分:0)
使用.git/hooks/post-receive
-hook是完全正确的。
我建议您检查服务器用户是否具有执行它的文件系统权限。
登录您的远程服务器并切换到<<your-repo>>/.git/hooks
,您可以调用ls -l
以“长”格式列出所有可见文件。你现在应该看到类似的东西:
-rwxr-xr-- 12 billythekid unicorns 408 19 Mar 2013 post-receive
^ ^ ^ ^
| | | |
| + owner + group + filename
|
+ file-type & permissions
第一个字符(-
)告诉我们正在使用文件(而不是使用d
irectory或l
墨水)之后,有三个可能的三个角色r
,w
和x
的权限(owner
ead,group
rite和e other
ecute)。
现在您必须确保服务器进程是所有者或登记组的一部分,而owner
或group
具有执行权。或者授予other
的执行权限。
您可以使用chown
修改所有权,并使用chmod
修改权限。您可以在此Ubuntu community help-article中阅读有关文件权限的更多信息。