sudo apt-get install openssh-server openssh-client git gitweb apache2
1、在服务器端所需目录下建立一个git仓库:
git init --bare sample.git
这个时候,在没有gitweb的情况下这个git服务端仓库已经可以使用了,可在客户端上:
git clone gitserver@:/<路径>/sample.git
2、在服务器端配置git仓库的目录路径(这个目录可以存放多个git服务端仓库,会一起在网页中加载),修改/etc/gitweb.conf文件中projectroot参数,eg:
$projectroot = "/home//";
在第一步安装好gitweb之后,在/etc/apache2/conf.d目录下会自动生成gitweb配置文件,用来指定git的CGI显示路径等,这个时候需要根据系统的不同来修改gitweb配置文件的路径。eg:
1、在ubuntu12.04下,查看/etc/apache2/apache2.conf配置的部分内容为:
# Include module configuration:
Include mods-enabled/*.load
Include mods-enabled/*.conf
# Include all the user configurations:
Include httpd.conf
# Include ports listing
Include ports.conf
# Include generic snippets of statements
Include conf.d/
# Include the virtual host configurations:
Include sites-enabled/
此时conf.d目录内容被加载进了配置,所以其gitweb文件会生效,无需改动。
2、在ubuntu14.04下,查看/etc/apache2/apache2.conf配置的部分内容为:
# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
并未将conf.d目录内容加载如配置,所以gitweb文件不生效,需要将其复制到conf-available目录下:
sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf
sudo a2enmod cgi
sudo service apache2 restart
1、原始主页面如下:
Commit如下:
2、可以使用一个开源的GitWeb主题来美化这个页面,具体请看:https://github.com/kogakure/gitweb-theme
在git服务器上将这个开源项目克隆下来,根据readme说明执行:
./setup -vi --install
这条指令会操作你的/usr/share/gitweb/static目录中的内容,不用担心,它会在原目录中为你将原文件备份(分别为:git-favicon.png、git-logo.png、gitweb.css)
sudo a2enmod cgi
sudo service apache2 restart
刷新你的浏览器gitweb页面,可得到如下所示:
Commit如下:
1、需要在服务器中安装highlight软件:
sudo apt-get install highlight
2、安装完成后,编辑/etc/gitweb.conf文件,在末尾添加:
$feature{'highlight'}{'default'} = [1];
2.1、重启阿帕奇服务,网页中的代码就可以高亮显示了。有少部分的编程语言未显示语法高亮,如C#可以在/etc/gitweb.conf文件中继续添加如下行:
$highlight_ext{'cs'} = 'csharp';
$highlight_ext{'resx'} = 'xml';
$highlight_ext{'config'} = 'xml';
3.1、设置克隆每个版本库的URL地址,一个版本库可以设置多个地址
@git_base_url_list= ('[email protected]:/home/servername/path');
3.2、菜单定制:tree添加快照(snapshot)下载链接
$feature{'snapshot'}{'default'} = ['zip', 'tgz'];
$feature{'snapshot'}{'override'} = 1;
在打开一些中文目录或文件时,网页会乱码:
1、修改/usr/share/gitweb/gitweb.cgi文件,将文件中所有的:
file_name=>"$basedir$t->{'name'}"
替换为(注意先将原文件备份):
file_name=>"$basedir" . to_utf8($t->{'name'})
2、检查gitweb.cgi文件权限为:
-rwxr-xr-x 1 root root 236335 11月 20 14:14 gitweb.cgi*
若不是,则需要修改为正确的权限:
sudo chmod 755 gitweb.cgi
sudo chown root:root gitweb.cgi
3、重启apache2服务,可使包含中文文件名、目录的网页正常显示:
即使在局域网环境下,可能不允许让内网的所有人都能随意浏览gitweb,这时候可以做一个基本身份验证功能,参考Ubuntu下Apache基于用户名/口令简单认证这篇文章。
对于少量用户,可以使用这种最基本的认证模式mod_auth模块,它不能用于安全性要求极高的场合。对于大量用户可以使用mod_dbm、mod_mysql模块,以下内容不涉及。
1、修改/etc/apache2/sites-available/default文件内容以开启认证配置,将其中的:
Options FollowSymLinks
AllowOverride None
修改为:
Options FollowSymLinks
AllowOverride AuthConfig
关于更多的关于default文件的说明,请参考http://wiki.ubuntu.org.cn/Apache。
2、在/etc/apache2/httpd.conf文件中添加如下内容:
#你的服务器名称
ServerName GIT
#网站根目录的路径
DocumentRoot /usr/share/gitweb
#认证的配置文件位置
AccessFileName /usr/share/gitweb/.htaccess
3、在/usr/share/gitweb目录下添加.htpasswd文件,用于保存登录用户的用户名和密码:
sudo touch /usr/share/gitweb/.htpasswd
sudo chmod 755 /usr/share/gitweb/.htpasswd
接着用htpasswd命令新建用户:
sudo htpasswd -c /usr/share/gitweb/.htpasswd <用户名>
根据提示输入两次密码后成功保存,第二次添加用户时,不要使用-c选项,否则会覆盖前面添加的内容。
4、在/usr/share/gitweb目录下添加.htaccess文件,内容如下:
#在弹出对话框中显示的标题名称
AuthName GitWeb
AuthType Basic
#用于存储用户名密码的.htpasswd的绝对路径
AuthUserFile /usr/share/gitweb/.htpasswd
#添加允许登录的用户,这里添加的用户名要在.htpasswd中有对应的用户名和密码
require user <用户名>
再定义.htaccess文件权限:
sudo chmod 755 .htaccess
4.1、如果不止一个用户,则可以在/usr/share/gitweb下再建立一个.htgroup文件,写入内容格式为:
<组名>:<用户名><用户名><用户名>
再到.htaccess文件中添加行:
#用户组文件.htgroup的绝对路径
AuthUserFile /usr/share/gitweb/.htgroup
#添加允许登录的组
require group <组名>
定义.htgroup文件权限:
sudo chmod 755 .htgroup
5、重启阿帕奇服务:
sudo service apache2 restart
此时打开网页就需要使用账号和密码了:
在客户端上正常使用git的clone、push和pull功能时,需要每次输入服务端的密码(git是使用ssh协议传输数据的),在服务器端设置了客户端的ssh公钥,可以免密码在客户机上使用git。(注意,与第八步的gitweb网页用户名和密码没有任何关系)
1、在客户端生成rsa公钥:
ssh-keygen -t rsa -C "<你的邮箱地址>"
这里的邮箱地址可以随意输入,和~/.gitconfig文件中设置的邮箱没有任何关系,也不影响免密功能。
一路回车键确定后,会在~/.ssh目录下生成id_rsa、id_rsa.pub文件,这个id_rsa.pub文件即为公钥。
2、复制id_rsa.pub文件中的内容,将其粘贴到服务器端~/.ssh/authorized_keys文件中。若不存在这个文件,则使用vi编辑器新建并粘贴客户端公钥,多个客户端公钥请使用换行隔开。之后使用git将不再提示输入密码了。
3、删除服务器端authorized_keys文件中的某客户机ssh公钥后,该客户机可能也无法直接使用ssh用户名和密码来操作git,这时候只需要删除客户机端的~/.ssh/known_hosts文件即可正常使用ssh用户名密码了。