Git在服务器上的部署与使用
【概述】
Git是一个开源的分布式版本控制系统,记录了版本库从0开始所有的变化过程。
Git服务器可以采用四种方式 的协议:本地传输,SSH 协议,Git 协议和HTTP 协议。其中SSH协议是推荐的协议。而权限管理器有两种Gitosis和Gitolite。Gitosis已经于09年停止更新,不过仍然可以用。gitolite一直还在更新版本。Gitolite的权限控制更加强大和复杂一些。
Gitolite 是一款 Perl 语言开发的 Git 服务管理工具,通过公钥对用户进行认证,并能够通过配置文件对写操作进行基于分支和路径的的精细授权。Gitolite 采用的是 SSH 协议并且使用 SSH 公钥认证,因此需要对 SSH 非常熟悉,无论是管理员还是普通用户。这里有一篇关于SSH的原理性文章值得一读《SSH原理与运用》。
本文讲述了管理员如何在服务器上部署Git,在浏览器里访问。
【环境】
Ubuntu10.10
【约定】
服务器 qy@server
客户端 qyddbear@client
服务器切换到git用户 git@server
【部署步骤】
1. 安装openssh
qy@server:~$ sudo apt-get install openssh-server
qy@server:~$ adduser --system --shell /bin/bash --group git
安装 Gitolite,首先要在服务器端创建专用帐号,所有用户都通过此帐号访问 Git 库。为方便易记,选择 git 作为专用帐号名称。创建的是一个禁用密码的git用户。
3. 添加git用户到ssh用户组
有的系统,只允许特定的用户组(如 ssh 用户组)的用户才可以通过 SSH 协议登录,这就需要将新建的 git 用户添加到 ssh 用户组中。
qy@server:~$ sudo adduser git ssh
4. 设置git用户口令
qy@server:~$ sudo passwd git
5. 安装Git和Gitolite
qy@server:~$ sudo apt-get install git-core
qy@server:~$ sudo apt-get install gitolite
当 gitolite 安装完成后,在服务器端/home/git/repositories/自动创建了一个用于 gitolite 自身管理的 git 库: gitolite-admin.git 。
6. 生成公钥密钥
qyddbear@client:~$ ssh-keygen -t rsa
连续按3次回车。
7. 将公钥复制到服务器上
管理员公钥可起名为admin.pub。普通用户可起名为xxx.pub。
qyddbear@client:~$ sudo scp ~/.ssh/id_rsa.pub git@serverip:/tmp/admin.pub
8. 切换到git专用账号
qy@server:~$ su - git
9. 将公钥导入服务器
git@server:~$ gl-setup /tmp/admin.pub
10. 建立无口令登录
当整个 git 服务配置完成,运行正常后,建议取消 git 的口令,只允许公钥认证。
qyddbear@client:~$ ssh-copy-id git@serverip
11. 客户端安装Git
qyddbear@client:~$ sudo apt-get install git
12. 克隆gitolite-admin库
qyddbear@client:~$ git clone git@serverip:gitolite-admin
这一步相当于SVN里的checkout。gitolite中的仓库全部是纯仓库形式的,即没有工作目录,对任何仓库中的工作目录进行修改或添加内容时,都需先将仓库克隆下来才行。因此可以通过克隆来验证gitolite是否安装成功。
此时在用户目录/home/qyddbear下生成gitolite-admin目录,下面有keydir和conf两个目录。keydir里是所有组成员的公钥,初始时只有一个用户公钥,即 amdin用户的公钥admin.pub。conf目录下的gitolite.conf 文件为授权文件,用于配置用户和权限。初始内容为:
#gitolite conf # please see conf/example.conf for details on syntax and features repo gitolite-admin RW+ = admin repo testing RW+ = @all
缺省授权文件中只设置了两个版本库的授权:
gitolite-admin即本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。
testing缺省设置的测试版本库,设置为任何人都可以读写以及强制更新。
repo mytest
RW+ = @all
提交更改:
qyddbear@client:~$ git commit -m "add mytesting repo" /home/qyddbear/gitolite-admin/conf/gitolite.conf
push到服务器:
qyddbear@client:~$ git push
再登陆到服务器上去验证,查看/home/git/repositories,发现里面多了一个mytesting.git的目录。
14. 通过浏览器访问qy@server:~$ sudo apt-get install apache2 libapache2-mod-php5 php-geshi
建立好了之后,/var/www就会自动创建。下面安装ViewGit并配置:
qy@server:~$ cd /var/www qy@server:~$ sudo git clone git://repo.or.cz/viewgit.git qy@server:~$ sudo chown -vR www-data:www-data git qy@server:~$ cd /var/www/viewgit/inc qy@server:~$ sudo cp config.php localconfig.php qy@server:~$ sudo chown www-data:www-data localconfig.php qy@server:~$ sudo gedit localconfig.php
修改其中的两行如下:
$conf['projects'] = array( 'mytesting.git' => array('repo' => '/home/git/repositories/mytesting.git/'), );
$conf['projects_glob'] = array('/home/git/repositories/*.git');
将www-dat加入git组
qy@server:~$ sudo adduser www-data git
浏览器里输入http://serverip/viewgit,得到如下所示:
【参考文献】
Gitolite构建Git服务器 http://www.doc88.com/p-089373183551.html
UbuntuHelp:Git http://wiki.ubuntu.org.cn/UbuntuHelp:Git#Adding_a_new_project_to_the_repository
让gitweb跑起来 http://my.oschina.net/u/174445/blog/37057
git + gitolite + git-daemon + gitweb setup on Ubuntu 11.10 server http://computercamp.cdwilson.us/git-gitolite-git-daemon-gitweb-setup-on-ubunt