标题是一般性的,但我有更具体的问题。我深陷权限噩梦中,试图使用Git建立一个“push-to-deploy”系统。
从本地机器,我通过SSH推送到服务器(Ubuntu 14.04)。我已将服务器设置为远程

git remote add development [email protected]:/home/dummyuser/bare/repo.git

这个裸存储库位于我们用来处理部署任务的虚拟用户dummyuser的主文件夹中。devuser是我自己在开发服务器上的帐户。
我在远程存储库(post-receive)中设置了一个development.server:/home/dummyuser/bare/repo.git/hooks/post-receive连接,用于通过git checkout将文件部署到同一服务器上的web服务器目录,称之为webfolder/。该文件夹当前具有权限
drwxr-xr-x dummyuser www-data webfolder/

其中www-data是与Apache用户关联的组。
如果我有post-receive钩子脚本,请使用命令
git --work-tree=/var/www/webfolder --git-dir=/home/dummyuser/bare/repo.git checkout -f

我得到了它无法写入webfolder/的错误,这是可以预测的,因为我假设脚本是以我的身份运行的(devuser),因为我通过SSH发起了推送,并且devuserwebfolder/没有任何权限。
但是,如果我将脚本更改为充当dummyuser
sudo -u dummyuser git --work-tree=/var/www/webfolder --git-dir=/home/dummyuser/bare/repo.git checkout -f

只是想看看会发生什么,我有个错误
warning: unable to access '/home/devuser/.config/git/attributes': Permission denied

有几件事我不明白:
1)既不存在“CC”,也不存在“CC”。这很好,但是如果Git需要访问一个/home/devuser/.config/文件夹,为什么在我设置裸repo和执行hooks时它没有抱怨?
2)既然我试图充当/home/dummyuser/.config/,为什么Git要在.config/中查找devuser文件夹?为什么它不查看dummyuser
我一直在研究一个让人发疯的问题的一小部分,那就是“使用Git”已经持续了四个小时了,而我的大脑是模糊的,所以请使用小单词。

最佳答案

问题在于sudo -u dummyuser没有设置Git期望的环境变量。如果我将HOME=/home/dummyuser添加到post-receive钩子,部署将按预期工作。
如果有人能提供更多关于正在发生的事情或更好的解决方案的细节,写下来作为一个答案,我会接受的。两个注意事项:
dummyuser没有登录名,因此在sudo -iu dummyuser脚本中使用post-receive将不起作用
手动设置HOME=/home/dummyuser并成功执行脚本后,我发现终端的echo $HOME返回/home/devuser,因此不会永久更改$HOME
成功执行hook脚本后,~devuser/~dummyuser//root/都没有.config/文件夹。所以。。。我还是不知道为什么吉特会挂断电话。

08-27 20:16