按照以网络为中心的 Git 工作流程中的说明,我在我的网络服务器上设置了一个 prime 和 hub 存储库,然后将 hub 克隆到我家里的机器上。
我开始测试 documentroot 中更改文件的提交和推送,这些更改在网络服务器的根目录中显示正常。但是,当我尝试将文件推送到子目录中时,我收到了以下消息:
remote:
remote: **** Pulling changes into Prime [Hub's post-update hook]
remote:
remote: From /home/git/site_hub
remote: * branch master -> FETCH_HEAD
remote: error: unable to create file academy/testthegit2.html (Permission denied)
同样,在 web 根目录中没有权限问题,但是将文件放在子目录中并抛出错误。
git 用户在 apache 组中,子目录是 chmod 755。
这是集线器的更新后:
#!/bin/sh
echo
echo "**** Pulling changes into Prime [Hub's post-update hook]"
echo
cd /usr/local/apache/htdocs || exit
unset GIT_DIR
git pull hub master
exec git-update-server-info
和主要(文档根)更新后:
#!/bin/sh
echo
echo "**** pushing changes to Hub [Prime's post-commit hook]"
echo
git push hub
重申一下,在 root 中工作,在 subdir 中失败。
感谢您的任何建议。
您需要添加一个包装器来更正更新后挂钩的权限。根据您的服务器设置方式,涉及不同的步骤。我将描述我的用例,希望您可以根据自己的需要进行调整。
在我的服务器中,裸存储库(集线器)由 gitosis/gitolite/plain git 用户使用 git-shell 管理。下的文件由
$GITOSIS_HOME
拥有gitosis:gitosis
并已取消屏蔽077
。为了正确提取更改,我需要添加对存储在其中的帮助程序脚本的调用,该脚本
/usr/local/bin
在 prime/live 存储库中递归设置所有者、组、权限和 SELinux 上下文。顺便说一句,我还需要在我的
sudoers(5)
文件中添加一行,以允许gitosis
以 root 身份使用!requiretty
和运行脚本NOPASSWD
。