Jil*_*nig 12 git git-pull githooks laravel file-ownership
我在这里看到了一些类似的问题,但是给出的解决方案似乎都不起作用...想知道它们是否已经过时,或者这种情况在某种程度上有所不同...所以我想打开一个新线程谈论它。
我遇到了一个令人沮丧的问题,每次执行 和 时git pull,它都会将所有者更改为拉取者的用户。然后发生的情况是该网站显示以下错误:
Warning: file_get_contents(/var/www/html/wp-content/themes/<my-theme>/resources/views/<changed-file>): failed to open stream: Permission denied in /var/www/html/wp-includes/class-wp-theme.php on line 1207
这只能通过运行chown www-data更改的文件来修复。
当更多的人开始在网站上工作时,或者当重要文件发生更改(默认模板/页眉/页脚..)时,这将成为一个问题,并且网站将变为空白,直到运行 chown。
Laravel、wordpress、ubuntu 18、armor 托管
Git 存储库存储在自定义主题中
我尝试了一些解决方案,但似乎都不起作用,(也许是因为它们实施不正确......)
1:将文件模式设置为 false - 我在本地计算机和相关服务器上将文件模式本地和全局设置为 false。我也尝试过将大小写更改为“fileMode”。
2:实现更新后挂钩 - 我添加了一个更新后挂钩来自动更新文件权限/所有权。这是脚本(请注意,git 存储库位于自定义主题中):
#!/bin/sh
# default owner user
OWNER="www-data:www-data"
# changed file permission
PERMISSION="664"
# web repository directory
REPO_DIR="/var/www/html/wp-content/themes/quorum-theme"
# remote repository
REMOTE_REPO="origin"
# public branch of the remote repository
REMOTE_REPO_BRANCH="master"
cd $REPO_DIR || exit
unset GIT_DIR
files="$(git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD)"
git merge FETCH_HEAD
for file in $files
do
sudo chown $OWNER $file
sudo chmod $PERMISSION $file
done
exec git-update-server-info
Run Code Online (Sandbox Code Playgroud)
如果还有其他值得尝试的事情,或者您发现我的代码存在问题,请告诉我......
一切顺利,
吉尔
Yus*_*ali 11
您已经非常接近正确的解决方案了。
您需要启用以下钩子:
post-merge,成功后调用git pullpost-checkout,成功后调用git checkout如果你确定只使用git pull,那么post-merge钩子就足够了。
启用两个钩子可以保证您始终调用该钩子,而无需支付额外费用。
钩子的内容应该是这样的:
#!/bin/sh
# default owner user
OWNER="www-data:www-data"
# web repository directory
REPO_DIR="/var/www/html/wp-content/themes/quorum-theme"
echo
echo "---"
echo "--- Resetting ownership to ${OWNER} on ${REPO_DIR}"
sudo chown -R $OWNER $REPO_DIR
echo "--- Done"
echo "---"
Run Code Online (Sandbox Code Playgroud)
OWNER该脚本将重置内部所有文件和目录的所有权REPO_DIR。
我已经复制了您帖子中的值,最终将其更改为您的需要。
要启用该挂钩,您应该:
post-merge创建一个以上面的脚本 命名的文件.git/hook/将其移动到您的存储库 目录中chmod +x post-merge 最终对post-checkout钩子重复这些步骤,它需要等于post-merge钩子。
sudo git pull如果您的用户不是,请注意执行 a root。目标目录中的所有文件和目录都属于www-data,您需要git pull以超级用户权限执行该命令,否则命令将失败。
| 归档时间: |
|
| 查看次数: |
3880 次 |
| 最近记录: |