如何在http上设置git?

Mar*_*moy 18 apache git http git-http-backend

我需要使用git-over-http(智能http)设置一个git服务器,但是在线可用的资源很混乱,混合了其他apache配置,缺少细节或者不够明确.

我是根据我发现缺乏可用资源的问题自己回答这个问题的.

Mar*_*moy 34

首先,有必要了解git-over-http有2个组件:git和apache.这两个通过名为git-http-backend的脚本连接.挑战是配置这两个组件之间的接口,以便通过apache转发对git的http请求.

注意:安全性超出了本指南的范围.

  1. 首先使用您的发行版的软件包管理器安装git和apache2.

  2. 添加apache所需的模块以启用git-over-http.这些是cgi,别名和环境

$ a2enmod cgi alias env
Run Code Online (Sandbox Code Playgroud)
  1. 复制以下内容/etc/apache2/httpd.conf(不删除其中包含的任何内容)
<VirtualHost *:80>
    SetEnv GIT_PROJECT_ROOT /data/git
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
    ScriptAliasMatch \
        "(?x)^/(.*/(HEAD | \
        info/refs | \
        objects/(info/[^/]+ | \
        [0-9a-f]{2}/[0-9a-f]{38} | \
        pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
        git-(upload|receive)-pack))$" \
        "/usr/lib/git/git-http-backend/$1"
    Alias /git /data/git
    <Directory /usr/lib/git>
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
  1. 现在用/data/git服务器上的git repos的父目录替换2次出现(如果你还没有任何存储库,请不要担心,只需使用你打算放置它的目录/它们)

也可以替换/usr/lib/git/git-http-backend为系统上的git-http-backend的位置,可以使用它找到$ find / -name git-http-backend

可能是您的系统REDIRECT_REMOTE_USER实际上覆盖了有效的REMOTE_USER.如果完成后此设置不起作用,请尝试删除该行.

根据来源,可能需要替换Require all granted apache 2.4及更高版本的Directory标记中的最后两行.

  1. 重启apache服务器: $ apache2ctl -k graceful

现在已经设置了apache服务器,但是我们还没有完成,设置repos有一些重要的部分会影响这个设置是否有效.

  1. 设置回购:
$ mkdir myrepo.git
$ cd myrepo.git
$ git init --bare --shared
$ cp hooks/post-update.sample hooks/post-update
$ git update-server-info
$ chown -R wwwrun:www
Run Code Online (Sandbox Code Playgroud)

在这里,重要的是要理解最后一行将repo的所有者更改为apache2用户.此用户可能在您的系统上有所不同.要查找apache用户,请执行$ ps aux | egrep '(apache|httpd)'.然后找到用户的组名,执行$ id user-name.在我的系统上,用户是wwwrun和组www.相应地更换.

  1. 使用回购

要使用repo,您​​需要知道url.对于此设置,网址为http://server.domain/myrepo.git

注意:http s不起作用.

从客户端访问repo时,只需将其添加为远程:

$ git remote add origin http://server.domain/myrepo.git
Run Code Online (Sandbox Code Playgroud)

然后你可以像任何其他git repo一样与它进行交互.

  • 如果您在CentOS中执行此操作,但似乎没有任何进展-请仔细检查您的iptables规则。CentOS默认情况下将所有内容锁定。另外,如果您遵循Git文档,则可能需要修改.htpasswd文件的SELinux设置。 (2认同)