参考文章:

[1] http://hokietux.net/blog/?p=58 [2] http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way [3] http://www.nkuttler.de/2009/04/06/git-clone-ssh-could-not-resolve-hostname/

  1. git

很简单,直接用pacman安装即可 sudo pacman -S git

  1. gitosis

gitosis是一个方便管理git仓库的工具,安装方法:

  1. 从yaourt或者aur下载安装gitosis-git包 http://aur.archlinux.org/packages.php?ID=23419

  2. 新建git用户 sudo useradd –system –shell /bin/sh –comment ‘git version control’–user-group –home-dir /home/git/ git

  3. 将开发用户的rsa公钥导入gitosis,(没有公钥的话请先运行ssh-keygen -t rsa生成) sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub

  4. 如果以上步骤没有问题,那么运行 git clone ssh://git@hostname/gitosis-admin.git 后应该就能看到gitosis-admin.git这个目录了

  5. 新建项目、添加用户等操作参见[2],这里不再赘述

  1. gitweb

事实上ArchLinux中安装的git包自带了gitweb,可以用which gitweb搜到,一般默认在/usr/share/gitweb。下面假设我的http根目录为/home/httpd

  1. 将/usr/share/gitweb下的文件复制到/home/httpd/cgi-bin(其实似乎只要gitweb.cgi就够了) sudo cp -R /usr/share/gitweb /home/httpd/cgi-bin/

  2. /usr/share/gitweb下的.css和.png复制到/home/httpd/html/git/

  3. 修改或创建/etc/gitweb.conf,具体配置如下

# git命令的地址
$GIT = "/usr/bin/git";

# 项目仓库地址
$projectroot = "/home/git/repositories";

# 网页显示相关的文件,我把它们都放在了/home/httpd/html/git/下
$stylesheet = "/git/gitweb.css";
$logo = "/git/git-logo.png";
$favicon = "/git/git-favicon.png";

# 首页显示的站点名
$site_name = "ZelluX's Git Trees";

# 项目信息中显示的地址,
@git_base_url_list = ("ssh://git\@hostname");

# 网页中项目说明的显示长度
$projects_list_description_width = 50;

# 发布的项目的标记。例如/home/git/repositories/hello/git-daemon-export-ok存在,
# 那么hello这个项目就会显示在项目列表上。
# 但是似乎每次pull或者push操作都会导致git把这个它认为多余的文件删掉,不知道有没有其他的解决方案。
# 把这行注释掉就允许所有的项目显示在网页上。
$export_ok = "git-daemon-export-ok";

$feature{'pathinfo'}{'default'} = [1];

$feature{'blame'}{'default'} = [1];
$feature{'blame'}{'override'} = [1];

$feature{'pickaxe'}{'default'} = [1];
$feature{'pickaxe'}{'override'} = [1];

$feature{'snapshot'}{'default'} = [1];
$feature{'snapshot'}{'override'} = [1];

$feature{'search'}{'default'} = [1];

$feature{'grep'}{'default'} = [1];
$feature{'grep'}{'override'} = [1];
  1. 在apache的配置中增加以下内容 /etc/httpd/conf/httpd.conf,这里我没有用VirtualHost机制,只加了行URL重写规则,VirtualHost的配置方法参见[1]

RewriteEngine on
RewriteRule ^/gitweb/(.*) /cgi-bin/gitweb.cgi/$1 [L,PT]
  1. 重启apache后应该就能访问 http://hostname/gitweb/ 了,如果提示Project not found,请确认apache能访问git的仓库目录,并且相应的项目目录下有git-daemon-export-ok这个文件。