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 
2. 创建git专用帐号
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次回车。

该命令会在用户主目录下创建 .ssh 目录,并在其中创建两个文件:
id_rsa私钥文件。是基于 RSA 算法创建。该私钥文件要妥善保管,不要泄漏。
id_rsa.pub公钥文件。和 id_rsa 文件是一对儿,该文件作为公钥文件,可以公开。普通用户需要将此公钥文件上传到服务器上。

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
gl-setup将公钥装进去了,在这里:cat  .ssh/authorized_keys,具有对应私钥的远端客户机就能用私钥对SERVER进行无口令访问。

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缺省设置的测试版本库,设置为任何人都可以读写以及强制更新。

13. 测试
编辑gitolite.conf,加入加入mytesting项目,如下:
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. 通过浏览器访问
需要Apache作为Web服务器。Gitweb我配不出来,改为采用ViewGit。ViewGit会连接到GeSHI,,因此要安装php-geshi
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

posted @ 2012-07-12 14:52  水芊芊  阅读(2682)  评论(0编辑  收藏  举报