无法实现Gitolite(Git)和nginx web服务器同时访问webspace

Failed to archieve Gitolite (Git) and nginx webserver access webspace at the same time


起点:

我想使用 post-receive 将网站空间更新为 git 用户到 www-data 目录。我在安装 Gitolite 之前将其存档,但它的工作方式似乎与以前不同(或者我遗漏了一些东西)。要说清楚:post-receive 在推送后执行(通常不在 Gitolite 上)...存档也很困难。

编辑:说清楚:我想归档 Git 和 www-data 可以访问和修改相同的文件。


我试过的:


到目前为止我注意到的:


代码(不是很重要,只是列出所有内容):

    #!/bin/sh
    GIT_WORK_TREE=/var/www/webspace git checkout -f

也许我只是遗漏了什么,但请帮助我。

尝试并遵循“adding other (non-update) hooks”以便 Gitolite 调用相关的 post-receive hook。

  1. 将此行添加到 rc 文件的 %RC 块内,如果它不存在,或者如果它已经存在并被注释掉,则取消注释:

    LOCAL_CODE => "$ENV{HOME}/local",
    
  2. 将你的钩子放入该目录,在一个名为“hooks/common”的子目录中:

    # log on to gitolite hosting user on the server, then:
    cd $HOME
    mkdir -p local/hooks/common
    cp your-post-receive-hook local/hooks/common/post-receive
    chmod +x local/hooks/common/post-receive
    
  3. 运行 gitolite setup 让挂钩传播到现有的回购协议(之后创建的回购协议无论如何都会得到它们)。

将用户(在我的例子中是 git)添加到网站空间组(对我来说是 www-data)

sudo usermod -a -G www-data git 

如果您以用户身份登录,请注销以重新加载群组。

logout
#or
exit
#or
CTRL+A+D

(如果您想重新检查以该用户身份登录的组并键入“groups”以查看该用户所在的组)


确保网站空间属于正确的组。对我来说:

sudo chown www-data:www-data -R /var/www/webspace

(如果你想重新检查这个,你可以进入目录并输入“ls -g”)


在我的例子中,我不得不稍微修改我的“post-receive”,因为权限总是 -rw----- 在签出后,所以这是我的“post-接收":

#!/bin/sh
GIT_WORK_TREE=/var/www/webspace git checkout -f    #default line to checkout
chmod -R a+r /var/www/webspace     #added by me because of permission issues

为方便起见,我在回购目录 (/home/git/repositories/repo/hooks/post-receive) 中放置了“post-receive”。文档告诉你创建一个新文件夹(/home/git/local/specific-hooks/repo/post-receive(但他们告诉你自己命名))

*上面写的所有路径、名称、组和权限只适用于我。它们可能因您的安装而异。


真正解决了我的问题:

  • 更改组后注销
  • 更改 post-receive
  • 中的权限 (chmod)