我遇到了一个烦人的问题,我在git同步目录中有一个JSON文件,该文件由Wordpress PHP插件直接读取和写入。为了使插件能够写入文件,文件的父目录及其内的所有文件必须归www-data
用户所有。
但是,如果我执行:
sudo chown -R www-data parent-directory/
然后,当我尝试任何Git命令时,我都会收到以下各种错误(取决于操作(:
error: unable to unlink old 'parent-directory/file.json': Permission denied
error: cannot open .git/FETCH_HEAD: Permission denied
为了能够同时使用插件和git,我必须将chown
保持在我的用户名和www-data
之间的父目录中。
有更好的方法吗?我能让git使用www-data
拥有的目录和文件吗?
这不是一个真正的Git问题,而是一个通用的Unix问题。在您的情况下,您可能想要做的事情是使用sudo -u www-data
(例如sudo -u www-data git pull
(调用Git命令。然后你的所有操作都将由www-data
用户完成,你就不会有问题了。
git
根本不存储文件所有者。它以运行git
命令的身份写入文件,并处理权限模型的有限子集(例如可执行位权限(。
为了解决您的问题,您需要以应该是文件所有者的用户身份运行git
(在您的情况下为www-data
(,或者在运行git
并签出所有文件后,运行一个脚本,将它们重新拥有给相应的用户,并以该用户的身份移动到位置。理想的做法是使用CI/CD工具从git存储库构建可部署的包,然后将其安装到服务器上,并让打包系统来处理权限。