Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 无法同时存档Gitolite(Git)和nginx Web服务器访问Web空间_Linux_Git_Nginx_Permissions_Gitolite - Fatal编程技术网

Linux 无法同时存档Gitolite(Git)和nginx Web服务器访问Web空间

Linux 无法同时存档Gitolite(Git)和nginx Web服务器访问Web空间,linux,git,nginx,permissions,gitolite,Linux,Git,Nginx,Permissions,Gitolite,起点: Ubuntu 20.04 Gitolite(/home/git/) Webspace/var/www/Webspace(通常由www-data拥有:www-data) Git用户(在www数据组中,也在组中未使用beeing的情况下尝试) 我想用post-receive将Web空间更新为git用户,并将其发送到www数据目录。在安装Gitolite之前,我已经将它存档了,但它似乎不像以前那样工作(或者我遗漏了一些东西)。为了说明这一点:post接收是在按下后执行的(通常不在Gitol

起点:

  • Ubuntu 20.04
  • Gitolite(/home/git/)
  • Webspace/var/www/Webspace(通常由www-data拥有:www-data)
  • Git用户(在www数据组中,也在组中未使用beeing的情况下尝试)
我想用post-receive将Web空间更新为git用户,并将其发送到www数据目录。在安装Gitolite之前,我已经将它存档了,但它似乎不像以前那样工作(或者我遗漏了一些东西)。为了说明这一点:post接收是在按下后执行的(通常不在Gitolite上)。。。这段时间也很难存档

编辑:为了清楚起见:我想存档Git和www数据可以访问和修改相同的文件。


我试过的:

  • chmod 777-R/var/www/webspace(在此之后git可以访问,但nginx返回403?)
  • 将Git用户添加到www数据组
  • chown www数据:git-R/var/www/webspace
  • chown git:www-data-R/var/www/webspace
  • chown git:git-R/var/www/webspace
  • chown www data:www data-R/var/www/webspace(集团内部有无git)(有无777)
  • 手动执行post接收(不允许操作)
  • 以root用户身份手动执行post-receive(嗯……当然可以,但这不是重点)
  • 。。。也许还有一些我可能错过的步骤

到目前为止,我注意到:

  • 与Git相反,Gitolite使用-rw-----(如果我没记错的话)检查回购协议,这可能就是为什么它不使用Gitolite而是使用Git的原因

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

  • 后接

也许我只是错过了一些东西,但请帮助我。

试着跟随“”,以便Gitolite调用相关的post接收挂钩

  • %rc
    块中的
    rc
    文件中添加这一行(如果它尚未出现),或者如果它已经出现并注释掉,则取消注释:

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

    #登录服务器上的gitolite主机用户,然后:
    cd$HOME
    mkdir-p本地/挂钩/通用
    cp您的post接收钩子本地/钩子/通用/post接收
    chmod+x本地/挂钩/公用/立柱接收
    
  • 运行
    gitolite安装程序
    将钩子传播到现有的repo(在此之后创建的repo将获得它们)

  • 将用户(在我的例子中是git)添加到Web空间组(我的www数据)

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

    logout
    #or
    exit
    #or
    CTRL+A+D
    
    (如果要以该用户身份重新检查组登录,并键入“groups”以查看用户所在的组)


    确保Web空间由正确的组拥有。对我来说:

    sudo chown www-data:www-data -R /var/www/webspace
    
    (如果您想重新检查,可以进入目录并键入“ls-g”)


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


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

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


    什么真正解决了我的问题:

    • 更改组后注销
    • 接收后更改权限(chmod)

    在您的post receive中,添加命令:
    id>/tmp/id.txt
    ,然后您将在输出文件中看到进程的用户和组id对不起,但我认为您理解错误。这个职位工作得很好。正如我所写的->“为了说明这一点:post接收是在推送之后执行的(通常不是在Gitolite上执行的)……这也很难实现。”我的问题是让git和www数据读写相同的文件。@justsomexanda post接收不应该工作,除非你完全绕过Gitolite。我的答案是关于在Gitolite的contexte中注册post receive。我按照Gitolite文档上的说明通过特定的钩子运行post receive。不是我想要的答案。Post-receive正在工作。
    logout
    #or
    exit
    #or
    CTRL+A+D
    
    sudo chown www-data:www-data -R /var/www/webspace
    
    #!/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