Git - 智能 HTTP
Posted it_xiangqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git - 智能 HTTP相关的知识,希望对你有一定的参考价值。
Git - 智能 HTTP
我们现在通过 SSH 进行了经过身份验证的访问,并通过 进行了未经身份验证的访问,但也有一个协议可以同时执行这两项操作。设置智能HTTP基本上只是启用一个CGI脚本,该脚本随服务器上调用的Git一起提供。此 CGI 将读取 由 或 发送到 HTTP URL 的路径和标头,并确定客户端是否可以通过 HTTP 进行通信(自版本 1.6.6 以来,对于任何客户端都是如此)。如果CGI看到客户端是智能的,它将与它进行智能通信;否则它将回退到哑行为(因此它向后兼容与旧客户端的读取)
让我们来看看一个非常基本的设置。我们将使用Apache作为CGI服务器进行设置。如果您没有Apache设置,则可以在Linux设备上使用如下内容进行设置:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
这也使 、 和 模块成为可能,这些都是正常运行所必需的。mod_cgimod_aliasmod_env
您还需要将目录的 Unix 用户组设置为,以便您的 Web 服务器可以读取和写入访问存储库,因为运行 CGI 脚本的 Apache 实例将(默认情况下)以该用户身份运行:/srv/gitwww-data
$ chgrp
接下来,我们需要向 Apache 配置中添加一些内容,以作为进入 Web 服务器路径的任何内容的处理程序运行 。git-http-backend/git
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
如果你省略环境变量,那么 Git 将只向未经身份验证的客户端提供包含该文件的存储库,就像 Git 守护程序所做的那样。GIT_HTTP_EXPORT_ALLgit-daemon-export-ok
最后,您需要告诉Apache允许请求并以某种方式对写入进行身份验证,可能使用如下所示的身份验证块:git-http-backend
<Files "git-http-backend">
AuthType Basic
AuthName "Git Access"
AuthUserFile /srv/git/.htpasswd
Require expr !(%QUERY_STRING -strmatch *service=git-receive-pack* || %REQUEST_URI =~ m#/git-receive-pack$#)
Require valid-user
</Files>
这将要求您创建一个包含所有有效用户密码的文件。下面是将“schacon”用户添加到文件的示例:.htpasswd
$ htpasswd -c /srv/git/.htpasswd schacon
有很多方法可以让Apache对用户进行身份验证,您必须选择并实现其中一种。这只是我们能想到的最简单的例子。您几乎肯定还希望通过SSL进行设置,以便所有这些数据都经过加密。
我们不想在Apache配置细节的兔子洞里走得太远,因为您很可能使用不同的服务器或具有不同的身份验证需求。这个想法是Git带有一个名为CGI的CGI,当调用它时,它将完成所有协商以通过HTTP发送和接收数据。它本身不实现任何身份验证,但可以在调用它的Web服务器层轻松控制。您几乎可以使用任何支持CGI的Web服务器来执行此操作,因此请使用您最熟悉的服务器。git-http-backend
以上是关于Git - 智能 HTTP的主要内容,如果未能解决你的问题,请参考以下文章