一般通过SSH进行授权访问,通过git://进行无授权的访问,而Smart HTTP可以同时实现上面两种方式访问。
设置Smart HTTP一般需要在服务器启用Git自带的git-http-backend 的CGI脚本,它会读取git fetch 或git push 命令项HTTP URL发送的请求路径和头部信息,判断客户端是否支持HTTP通信。如果CGI发现客户端支持Smart模式,则以智能模式与之通信;否则则以Dumb模式通信。
Apache
以Apache作为CGI服务器,安装Apache
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
上面操作会启用mod_cgi 、mod_alias 、mod_env 等Apache模块。
向Apache配置文件添加内容,让git-http-backend 作为web服务器对/git全路径请求的处理器
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
如果要实现写操作授权验证
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/git/.htpasswd
Require valid-user
</LocationMatch>
如要创建包含所有合法用户密码的.htaccess 文件,比如增加schacon用户
$ htdigest -c /opt/git/.htpasswd "Git Access" schacon
GitWeb
如果要对项目有读写权限或制度权限,可以建立基于网页的简易查看器,Git提供GitWeb的CGI脚本

如果想查看GitWeb如何展示项目,并且在服务器上安装轻量级的网络服务器如lighttpd或webrick,Git提供一个命令可以让你启动一个临时服务器。
在linux系统,lighttpd通常已经安装,此时只需要在项目目录执行git instaweb 即可。
如果是mac系统,Mac OS X Leopard预装Ruby,所以webrick或许是最好的选择。
$ git instaweb --httpd=webrick
[2009-02-21 10:02:21] INFO WEBrick 1.3.1
[2009-02-21 10:02:21] INFO ruby 1.8.6 (2008-03-03) [universal-darwin9.0]
该命令启动监听1234端口的HTTP服务器。关闭服务器
$ git instaweb --httpd=webrick --stop
在Apache使用这个CGI脚本,需要为此添加一个虚拟主机
<VirtualHost *:80>
ServerName gitserver
DocumentRoot /var/www/gitweb
<Directory /var/www/gitweb>
Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>