GitWeb学习笔记

来源:互联网 发布:sql server2008r2密钥 编辑:程序博客网 时间:2024/06/04 17:59

一、GitWeb服务器Ubuntu系统所需软件安装

sudo apt-get install openssh-server openssh-client git gitweb apache2


二、git配置部分

1、在服务器端所需目录下建立一个git仓库:

git init --bare sample.git

这个时候,在没有gitweb的情况下这个git服务端仓库已经可以使用了,可在客户端上:

git clone gitserver@<serverip>:/<路径>/sample.git
2、在服务器端配置git仓库的目录路径(这个目录可以存放多个git服务端仓库,会一起在网页中加载),修改/etc/gitweb.conf文件中projectroot参数,eg:

$projectroot = "/home/<username>/<gitlibrary>";


三、apache2配置部分

在第一步安装好gitweb之后,在/etc/apache2/conf.d目录下会自动生成gitweb配置文件,用来指定git的CGI显示路径等,这个时候需要根据系统的不同来修改gitweb配置文件的路径。eg:

1、在ubuntu12.04下,查看/etc/apache2/apache2.conf配置的部分内容为:

# Include module configuration:Include mods-enabled/*.loadInclude mods-enabled/*.conf# Include all the user configurations:Include httpd.conf# Include ports listingInclude ports.conf# Include generic snippets of statementsInclude 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/*.loadIncludeOptional mods-enabled/*.conf# Include generic snippets of statementsIncludeOptional 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


四、使能CGI和重启apache2服务:

sudo a2enmod cgisudo service apache2 restart

五、在浏览器中打开http://serverip/gitweb/,就可以看到项目情况。

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 cgisudo 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';

七、修复中文文件名、目录打开时乱码的问题

在打开一些中文目录或文件时,网页会乱码:



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.cgisudo chown root:root gitweb.cgi
3、重启apache2服务,可使包含中文文件名、目录的网页正常显示:


八、基本的登录功能

即使在局域网环境下,可能不允许让内网的所有人都能随意浏览gitweb,这时候可以做一个基本身份验证功能,参考Ubuntu下Apache基于用户名/口令简单认证这篇文章。

对于少量用户,可以使用这种最基本的认证模式mod_auth模块,它不能用于安全性要求极高的场合。对于大量用户可以使用mod_dbm、mod_mysql模块,以下内容不涉及。

1、修改/etc/apache2/sites-available/default文件内容以开启认证配置,将其中的:

<Directory />    Options FollowSymLinks    AllowOverride None</Directory>
修改为:

<Directory />    Options FollowSymLinks    AllowOverride AuthConfig</Directory>

关于更多的关于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/.htpasswdsudo chmod 755 /usr/share/gitweb/.htpasswd

接着用htpasswd命令新建用户:

sudo htpasswd -c /usr/share/gitweb/.htpasswd <用户名>
根据提示输入两次密码后成功保存,第二次添加用户时,不要使用-c选项,否则会覆盖前面添加的内容。

4、在/usr/share/gitweb目录下添加.htaccess文件,内容如下:

#在弹出对话框中显示的标题名称AuthName GitWebAuthType 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
此时打开网页就需要使用账号和密码了:



九、通过rsa公钥实现免密码使用ssh

在客户端上正常使用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将不再提示输入密码了。

原创粉丝点击