一般通过SSH进行授权访问,通过git://进行无授权的访问,而Smart HTTP可以同时实现上面两种方式访问。

设置Smart HTTP一般需要在服务器启用Git自带的git-http-backend 的CGI脚本,它会读取git fetchgit push 命令项HTTP URL发送的请求路径和头部信息,判断客户端是否支持HTTP通信。如果CGI发现客户端支持Smart模式,则以智能模式与之通信;否则则以Dumb模式通信。

Apache

以Apache作为CGI服务器,安装Apache

$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

上面操作会启用mod_cgimod_aliasmod_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>

results matching ""

    No results matching ""