Sep 6

cgit 是一款为 Git 服务器提供 Web 浏览界面的工具,与 gitweb 的功能类似。不过,cgit 的界面更加友好一些,速度更快一些。这里就来谈谈如何在 Fedora 19 中安装与配置 cgit,以及用它替代 gitweb 实现与 Gitolite 的整合。

cgit 的安装非常便当,仅需执行:

$ sudo yum install cgit
接着适当地调整 cgit 目录的访问权限,这里以 Apache 服务器为例:
$ sudo nano -w /etc/httpd/conf.d/cgit.conf
#
# cgit configuration for apache
#

ScriptAlias /cgit /var/www/cgi-bin/cgit
Alias /cgit-data /usr/share/cgit/

<Directory "/usr/share/cgit/">
   AllowOverride None
   Options None
  <IfModule mod_authz_core.c>
       # Apache 2.4
       Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
       # Apache 2.2
       Order allow,deny
       Allow from all
   </IfModule>
</Directory>

<Directory "/var/www/cgi-bin"> 
  AllowOverride None 
  Options ExecCGI FollowSymlinks
  <IfModule mod_authz_core.c>
       # Apache 2.4
       Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
       # Apache 2.2
       Order allow,deny
       Allow from all
   </IfModule>
</Directory>
注意,确保上述设置与 cgit 的一下配置一致,也即编辑 /etc/cgitrc 文件:
$ sudo nano -w /etc/cgitrc
查看下面几行
# cgit config

css=/cgit/cgit.css
logo=/cgit/cgit.png
如果不想被搜索引擎索引的话,还可往里添加一行:
# if you don't want that webcrawler (like google) index your site
robots=noindex, nofollow
修改完成之后,重启 Apache 服务器
$ sudo service httpd restart
如果Apache 服务器已经配置好了的话,可以测试一下 cgit 的功能是否正常工作。这只需在可以访问当该服务器器的电脑上打开网页浏览器,并在地址栏输入 http://serverIP/cgit。如果网页能够打开,那么表明 cgit 已经能够工作了。
 
需要注意,上面只是测试了 cgit 提供的 Web 界面是否工作,但是还没有涉及到 Git 服务器的部分。下面开始来谈论 cgit 如何关联到 Git 服务器。实际上,它是通过 /etc/cgitrc 配置文件来关联 Git 服务器的:
$ sudo nano -w /etc/cgitrc
根据具体情况编辑该配置文件,例如修改下面这些行:
#
# List of repositories.
# This list could be kept in a different file (e.g. '/etc/cgitrepos')
# and included like this:
#   include=/etc/cgitrepos

#repo.url=foo
#repo.path=/var/lib/git/foo.git
#repo.desc=the master foo repository
#repo.owner=fooman@example.com
#repo.readme=info/web/about.html

repo.url=MyRepo
repo.path=/var/lib/git/MyRepo.git
repo.desc=This is my git repository
实际上,真正与 Git 服务有关的只有最后三行,这三行给出了 Git 仓库的位置、名称以及扼要的描述。更多的 Git 仓库,均可按该格式添加至 cgit 的配置文件。现在在网页浏览器的地址栏再次输入 http://serverIP/cgit 测试一下,看看能不能访问到 Git 仓库信息。
 
为了更好地控制 Git 服务器的访问权限,一般 Git 服务部分都是通过 Gitolite 这样的工具实现的。Gitolite 的配置过程在前面已经描述过了。自然而然的,需要考虑如何以 cgit 替代 gitweb,将它与 Gitolite 整合在一起。解决这个问题的方法与实现 gitweb 的整合过程差不多。首先,修改 Gitolite 新建仓库的默认权限,这可通过修改 /var/lib/gitolite/.gitolite.rc 的 UMASK 实现:
$ sudo nano -w /var/lib/gitolite/.gitolite.rc
更改 UMASK 为 0022,也即
#$REPO_UMASK = 0077; # gets you 'rwx------'
#$REPO_UMASK = 0027; # gets you 'rwxr-x---'
$REPO_UMASK = 0022; # gets you 'rwxr-xr-x'
接着通过下述命令修改 Gitolite 中所有现有仓库的权限:
$ sudo find /path/to/the/repository/ -type d -exec chmod og+rx {} \;
$ sudo find /path/to/the/repository/ -type f -exec chmod og+r {} \;
最后,为了让 cgit 能够自动访问到 Gitolite 中仓库信息,仍需修改配置文件 /etc/cgitrc:
$ sudo nano -w /etc/cgitrc
提供类似于 gitweb 中所需要的 projects.list 等信息,例如:
#
# information related to gitolite 
#

enable-git-config=1
enable-gitweb-owner=1
remove-suffix=1
project-list=/var/lib/gitolite/projects.list
scan-path=/var/lib/gitolite/repositories
请注意最后这 5 行,它们包含了与 Gitolite 整合所需要的所有内容。至于 Gitolite 中的修改,完全与 gitweb 所需的修改一致,这里就不再重复了。
 
如果还想为 cgit 锦上添花的话,可安装 highlight 实现 cgit 访问的 Git 仓库中源代码的高亮:
$ sudo yum install highlight

不过这还需要 cgit 的配置,也即

$ sudo nano -w /etc/cgitrc

增加或去掉下面这一行的注释

source-filter=/usr/lib/cgit/filters/syntax-highlighting.sh