-
A1. 附录 A:Git 在其他环境中的使用
- A1.1 图形界面
- A1.2 Git 在 Visual Studio 中的使用
- A1.3 Git 在 Visual Studio Code 中的使用
- A1.4 Git 在 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的使用
- A1.5 Git 在 Sublime Text 中的使用
- A1.6 Git 在 Bash 中的使用
- A1.7 Git 在 Zsh 中的使用
- A1.8 Git 在 PowerShell 中的使用
- A1.9 总结
-
A2. 附录 B:在应用程序中嵌入 Git
-
A3. 附录 C:Git 命令
4.6 Git 服务器 - 智能 HTTP
智能 HTTP
我们现在可以通过 SSH 进行身份验证访问,也可以通过 git://
进行匿名访问,但是还有一种协议可以同时实现两者。设置智能 HTTP 基本上就是在服务器上启用 Git 提供的一个名为 git-http-backend
的 CGI 脚本。此 CGI 将读取 git fetch
或 git push
发送到 HTTP URL 的路径和标头,并确定客户端是否可以通过 HTTP 进行通信(对于 1.6.6 版本之后的任何客户端都是正确的)。如果 CGI 发现客户端是智能的,它将与之进行智能通信;否则它将回退到愚蠢的行为(因此它与旧版客户端的读取兼容)。
让我们逐步完成一个非常基本的设置。我们将使用 Apache 作为 CGI 服务器来设置它。如果您没有设置 Apache,则可以在 Linux 机器上使用以下命令进行设置:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
这还启用了 mod_cgi
、mod_alias
和 mod_env
模块,这些模块都是正常运行所必需的。
您还需要将 /srv/git
目录的 Unix 用户组设置为 www-data
,以便您的 Web 服务器可以读写访问存储库,因为运行 CGI 脚本的 Apache 实例(默认情况下)将以该用户身份运行。
$ chgrp -R www-data /srv/git
接下来,我们需要向 Apache 配置中添加一些内容,以便将 git-http-backend
作为处理 Web 服务器 /git
路径中任何内容的处理程序。
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
如果您省略 GIT_HTTP_EXPORT_ALL
环境变量,则 Git 仅会向匿名客户端提供包含 git-daemon-export-ok
文件的存储库,就像 Git 守护进程所做的那样。
最后,您需要告诉 Apache 允许对 git-http-backend
的请求,并以某种方式对写入进行身份验证,可能使用类似如下的 Auth 块:
<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>
这将要求您创建一个 .htpasswd
文件,其中包含所有有效用户的密码。以下是如何向文件中添加“schacon”用户的示例:
$ htpasswd -c /srv/git/.htpasswd schacon
Apache 有很多方法可以对用户进行身份验证,您需要选择并实现其中一种。这只是一个我们能想到的最简单的例子。您还几乎肯定希望通过 SSL 设置此功能,以便所有这些数据都加密。
我们不想深入探讨 Apache 配置的具体细节,因为您可能正在使用不同的服务器或有不同的身份验证需求。我们的想法是,Git 自带一个名为 git-http-backend
的 CGI,当它被调用时,会完成所有通过 HTTP 发送和接收数据的协商工作。它本身并不实现任何身份验证,但这可以通过调用它的 Web 服务器层轻松控制。您几乎可以使用任何支持 CGI 的 Web 服务器来做到这一点,所以请选择您最熟悉的那个。
注意
|
有关在 Apache 中配置身份验证的更多信息,请查看此处 Apache 文档:https://httpd.apache.ac.cn/docs/current/howto/auth.html。 |