按照以 Web 为中心的 Git 工作流程我在我的网络服务器上设置了一个主要和中心存储库,然后将中心克隆到我家里的机器上。
我开始在 documentroot 中测试提交和推送更改的文件,更改在 Web 服务器的根目录中显示正常。但是,当我尝试推送子目录中的文件时,我收到了以下消息:
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
重申一下,在根目录中有效,在子目录中失败。
谢谢您的任何建议。
答案1
您需要添加包装器来更正更新后挂钩上的权限。根据您的服务器设置,涉及不同的步骤。我将描述我的用例,希望您可以根据自己的需求进行调整。
在我的服务器中,裸存储库(中心存储库)由 gitosis/gitolite/plain git 用户使用 git-shell 进行管理。下面的文件$GITOSIS_HOME
归gitosis/gitolite/plain 所有gitosis:gitosis
,并且是 umasked 的077
。
为了正确提取更改,我需要添加对我存储的辅助脚本的调用,/usr/local/bin
该脚本在 prime/live 存储库中递归设置所有者、组、权限和 SELinux 上下文。
顺便说一句,我还需要在我的文件中添加一行sudoers(5)
以允许以 root 身份使用和gitosis
运行脚本。!requiretty
NOPASSWD