1.1 git 简介
Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码。2005年,为了解决Linux系统的源码开发管理这一问题,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git,目前世界上最先进的分布式版本控制系统。
2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等,Git迅速成为最流行的分布式版本控制系统。
1.2 gitolite简介
如果不是要和他人协同开发,Git 根本就不需要架设服务器。Git 在本地可以直接使用本地版本库的路径完成 git 版本库间的操作。但是如果需要和他人分享版本库、协作开发,就需要能够通过特定的网络协议操作 Git 库。Git 支持的协议很丰富,架设服务器的选择也很多,不同的方案有着各自的优缺点。在Git服务管理工具这个领域,主要有三种流行的方案,它们分别是:
Gitosis - 轻量级, 开源项目,使用SSH公钥认证,只能做到库级的权限控制。目前项目已经停止开发,不再维护。
Gitolite - 轻量级,开源项目,使用SSH公钥认证,能做到分支级的权限控制。
Git + Repo + Gerrit - 超级重量级,集版本控制,库管理和代码审核为一身。可管理大型及超大型项目。
Gitolite 是一款 Git 授权管理工具,那么它具体是怎样的呢?我们姑且从它的几个特性来简单了解下:
在服务器端,使用一个 unix 用户作为远程访问的对象
为多用户提供访问权限,但他们不是真正的用户,不会获得 shell 权限
控制对多个 git 仓库的访问,读访问被repo层控制,写访问在 branch/tag/file/directory 层控制,包括谁能够 rewind,create 以及 delete branches/tags
能够不经过root允许进行安装,假设git和perl已经被安装了 (这句话不懂,暂时直译过来)?
认证通常采用sshd,但是也可以使用httpd
能够简化你的仓库路径,类似 GitHub 那样,例如:git@your_server.com:your-project.git
(下面介绍怎么安装Git服务器gitolite,以及怎么建立仓库、添加用户等操作,本篇文章不会介绍太多的Git本身的命令,有兴趣的大家可以自己去网上搜搜)
2、安装git
2.1 安装基础依赖包(在git服务器上操作)
#yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel |
2.2 安装git(在git服务器上操作)
#yum -y install git |
2.3 安装openssl-server(在git服务器上操作)
( ssh访问需要使用openssh-server)
#yum -y install openssh-server |
2.4 添加git管理用户和组(在git服务器上操作)
###添加git组 #groupadd git ###添加git用户并把它加入git组 #adduser -s /bin/bash -g git git ###设置git的密码(我随便设置密码为123456,实际中大家把这个密码设置得复杂点,安全) #passwd git |
2.5 生成ssh key(在git服务器上操作)
git需要使用ssh访问,需要生成一组ssh key,切换到git用户下操作:
#su git $ ssh-keygen -t rsa $cd .ssh/ $ cp id_rsa.pub authorized_keys |
3、安装gitolite
3.1 在git用户下创建bin目录(在git服务器上操作)
$ pwd /home/git/ $ mkdir bin |
3.2 从远端克隆gitolite(在git服务器上操作)
$ git clone git://github.com/sitaramc/gitolite $ ls |
3.3 安装gitolite至bin目录(在git服务器上操作)
$ gitolite/install -to $HOME/bin $ cd bin/ $ ls $ mv .ssh/authorized_keys ~/git.pub $ ls $cd /home/git/ $ ~/bin/gitolite setup -pk ~/git.pub $ ls bin gitolite git.pub projects.list repositories $ls repositories ###可以用git用户ssh到127.0.0.1进行验证一下,可以看到下面的正常验证显示 $ ssh git@127.0.0.1 |
gitolite安装完成,从上面ls命令查到看,成功安装gitolite后,会自动生成一个“repositories”目录,此目录下面有两个默认的仓库。一个是testing.git用来测试、另一个gitolite-admin.git就是用来管理git用户和版本库,所以需要创建一个管理员git用户来管理。
3.3 生成管理员仓库,不需要输入密码(在git服务器上操作)
$ git clone git@127.0.0.1:gitolite-admin ###上条命令执行后,会在当前目录下面生成gitolite-admin目录 $ ls $ cd gitolite-admin/ $ ls $ls conf/ $ls keydir/ |
说明:进入管理员仓库后,可以看到“conf”、“keydir”这两个目录。
conf/gitolite.conf:是添加用户、仓库的配置文件
keydir:是放对应用户的公钥目录
4、git客户端验证
4.1 centos客户端验证(在centos客户端上操作)
###比如我用另一台centos服务器做为客户端,在上面创建用户ganbing做为git客户端的用户 #yum -y install git #useradd ganbing #passwd ganbing ###切换ganbing用户,生成公钥,并把公钥拷贝到git服务器的"gitolite-admin"仓库中 # su - ganbing $ ssh-keygen -t rsa #scp .ssh/id_rsa.pub git@git服务器IP:gitolite-admin/keydir/ganbing.pub |
接下来几步很重要,大家要看清楚在哪里操作,到了下面的操作别搞混了,看清楚我写的在哪操作
添加仓库和用户(在git服务器上操作):
###在git服务器keydir目录中可以看到,git客户端ganbing的公钥已经拷贝过来了: $ ls keydir/ ###下面配置gitolite.conf,添加一个仓库“gb”,并把管理员git用户、git客户端用户ganbing配置为可读写这个gb仓库: $ vim conf/gitolite.conf 上面的含义是: 第1个repo,默认的管理员仓库gitolite-admin,用户git具有(读写)RW权限,和强制更新(+)的权限。 第2个repo,默认的测试仓库testing,@all所有用户都具有RW+权限。 第3个repo,我手动添加了一个gb仓库,用户git、ganbing具有(读写)RW权限。 更多参数说明在此不做详细的介绍,这些参数都很简单,还可以定义组,大家上网自行查阅资料。 |
将配置推送到gitolite服务器(在git服务器上操作)
走到这一步了,你是不是以为已经结束了,可以在客户端git clone了呢。其实还没有,我们刚才在gitolite.conf配置中添加了gb仓库,不是保存这个文件就会生效。我们需要提交才能生效:
###先在git服务器上也配置两个全局变量,名字自己随便定义就行,就是别和今后的git客户端重名就行: $git config --global user.email "git@123.com" $git config --global user.name "git" ###提交修改,所有的提交修改都是下面三条命令,以后添加新的仓库和git用户也是用下面这三条命令,还有在客户端上提交也是这三条命令,一定要记清楚: $ git add . $ git commit -m "add new user and new repo's gb" $ git push origin master ###提交完之后,进入repositories目录,查看仓库中是不是多了一个gb.git: $ cd repositories/ $ ls |
最后,我们回到centos客户端(在centos客户端上操作)
###第一次使用也需要表明身份,注意切换用户: $git config --global user.email "ganbing@123.com" $git config --global user.name "ganbing" ###测试git clone gb仓库: $ cd /home/ganbing/ $ git clone git@git服务器IP:gb 提示:上面的警告不用管,它告诉你克隆的一个空的仓库,因为gb仓库本身啥也没有 ###ls查看gb仓库已经clone过来了: $ls ###进入gb仓库,你添加个a.txt文件提交上去: $ touch a.txt $ git add . $ git commit -m "add file a.txt" $$ git push origin master |
如果大家的操作跟我上面一样,说明用centos客户端验证是OK的。毕竟没有谁整天用centos系统,我想大家多数都用windows系统,下面我就以windows系统来验证一下。
4.2 windows客户端验证
首先,你的电脑上要安装git程序,在这里我就不演示如何安装git,在D盘新建一个文件夹 testgit,进入这个文件夹,右键选择Git Bash,如下图(在windows客户端上操作):
生成ssh公钥,并把公钥拷贝到git服务器,当然你把公钥给git服务器的管理员也可以(在windows客户端上操作):
$ ssh-keygen -t rsa 如上图所示:我这台电脑已经生成过,所以我输入n,这里也指明公钥的路径((/c/Users/Administrator/.ssh/id_rsa)) ###进入.ssh目录,把id_rsa公钥拷贝到服务器,并把公钥重命名为windows_ganbing.pub: $ cd /c/Users/Administrator/.ssh/ $ scp id_rsa.pub git@172.18.18.32:gitolite-admin/keydir/windows_ganbing.pub 提示:如果这台windows是公司的开发人员,他需要把公钥发给git服务器管理员,毕竟不给告诉其他人git服务器管理的密码。 |
然后,进入git服务器(在git服务器上操作)
###先在服务器上查看windows_ganbing.pub公钥拷贝过来了没有: $ cd /home/git/gitolite-admin/keydir/ $ls ###配置gitolite.conf文件,把winows_ganbing用户加进来: 提示:上面用户之间用空格隔开就可以,你的公钥文件是什么名字,这里就输入什么名字 ###提交修改,上面说过了,用3条命令搞定: $ git add . $ git commit -m "add user windows_ganbing" $ git push origin master |
最后,git clone进行验证(在windows客户端上操作):
还是进入D盘-testgit目录,打开Git Bash:
$ git clone git@git服务器IP地址:gb ###检查gb仓库是否clone过来了: |
如上图所示,我们在windows客户端也测试成功,大家可以按我的步骤方法试一下,有问题的朋友可以留言一起探讨!!!
至于用MAC本客户端我就不演示了,我也没有买MAC本,哈哈。。。。
Centos 7.X 部署基于Git&Gitolite的分布式版本控制系统
原文地址:http://blog.51cto.com/ganbing/2052985