Centos 7.X 部署基于Git&Gitolite的分布式版本控制系统-阿里云开发者社区

开发者社区> 开发与运维> 正文

Centos 7.X 部署基于Git&Gitolite的分布式版本控制系统

简介:

1、简介

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

image.png


2.5 生成ssh key(在git服务器上操作

    git需要使用ssh访问,需要生成一组ssh key,切换到git用户下操作:

#su  git

$ ssh-keygen -t rsa

image.png

$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

image.png


$ ls

image.png


3.3 安装gitolite至bin目录(在git服务器上操作

$ gitolite/install -to $HOME/bin

$ cd bin/

$ ls

image.png

$ mv .ssh/authorized_keys  ~/git.pub

$ ls

image.png

$cd /home/git/

$ ~/bin/gitolite setup -pk ~/git.pub 

image.png

$ ls

bin  gitolite  git.pub  projects.list  repositories

$ls repositories

image.png


###可以用git用户ssh到127.0.0.1进行验证一下,可以看到下面的正常验证显示

$ ssh git@127.0.0.1

image.png


    gitolite安装完成,从上面ls命令查到看,成功安装gitolite后,会自动生成一个“repositories”目录,此目录下面有两个默认的仓库。一个是testing.git用来测试、另一个gitolite-admin.git就是用来管理git用户和版本库,所以需要创建一个管理员git用户来管理。


3.3 生成管理员仓库,不需要输入密码(在git服务器上操作)

$ git clone  git@127.0.0.1:gitolite-admin

image.png


###上条命令执行后,会在当前目录下面生成gitolite-admin目录

$ ls

image.png

$ cd gitolite-admin/

$ ls

image.png

$ls conf/

image.png

$ls keydir/

image.png

    说明:进入管理员仓库后,可以看到“conf”、“keydir”这两个目录。

    conf/gitolite.conf:是添加用户、仓库的配置文件

    keydir:是放对应用户的公钥目录


4、git客户端验证

4.1 centos客户端验证(在centos客户端上操作)

###比如我用另一台centos服务器做为客户端,在上面创建用户ganbing做为git客户端的用户

#yum -y install git

#useradd  ganbing

#passwd ganbing

image.png


###切换ganbing用户,生成公钥,并把公钥拷贝到git服务器的"gitolite-admin"仓库中

# su - ganbing

$ ssh-keygen  -t rsa

image.png


#scp .ssh/id_rsa.pub git@git服务器IP:gitolite-admin/keydir/ganbing.pub

image.png


接下来几步很重要,大家要看清楚在哪里操作,到了下面的操作别搞混了,看清楚我写的在哪操作

  • 添加仓库和用户(在git服务器上操作):

###在git服务器keydir目录中可以看到,git客户端ganbing的公钥已经拷贝过来了:

$ ls keydir/

image.png


###下面配置gitolite.conf,添加一个仓库“gb”,并把管理员git用户、git客户端用户ganbing配置为可读写这个gb仓库:

$ vim conf/gitolite.conf

image.png


上面的含义是:

    第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"

image.png

$ git push  origin master

image.png


###提交完之后,进入repositories目录,查看仓库中是不是多了一个gb.git:

$ cd repositories/

$ ls

image.png


  • 最后,我们回到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

image.png

提示:上面的警告不用管,它告诉你克隆的一个空的仓库,因为gb仓库本身啥也没有


###ls查看gb仓库已经clone过来了:

$ls 

image.png


###进入gb仓库,你添加个a.txt文件提交上去:

$ touch a.txt

$ git add .

$ git commit  -m "add file a.txt"

image.png

$$ git push origin master

image.png

    如果大家的操作跟我上面一样,说明用centos客户端验证是OK的。毕竟没有谁整天用centos系统,我想大家多数都用windows系统,下面我就以windows系统来验证一下。


4.2 windows客户端验证

  • 首先,你的电脑上要安装git程序,在这里我就不演示如何安装git,在D盘新建一个文件夹 testgit,进入这个文件夹,右键选择Git Bash,如下图(在windows客户端上操作)


    688856-20160412160009441-1585456688.png


  • 生成ssh公钥,并把公钥拷贝到git服务器,当然你把公钥给git服务器的管理员也可以(在windows客户端上操作)

$ ssh-keygen -t rsa

image.png

如上图所示:我这台电脑已经生成过,所以我输入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

image.png

提示:如果这台windows是公司的开发人员,他需要把公钥发给git服务器管理员,毕竟不给告诉其他人git服务器管理的密码。


  • 然后,进入git服务器(在git服务器上操作)

###先在服务器上查看windows_ganbing.pub公钥拷贝过来了没有:

$ cd /home/git/gitolite-admin/keydir/

$ls

image.png


###配置gitolite.conf文件,把winows_ganbing用户加进来:

image.png

提示:上面用户之间用空格隔开就可以,你的公钥文件是什么名字,这里就输入什么名字


###提交修改,上面说过了,用3条命令搞定:

$ git add .

$ git commit  -m "add user windows_ganbing"

image.png

$ git push origin master 

image.png


  • 最后,git clone进行验证(在windows客户端上操作):

    还是进入D盘-testgit目录,打开Git Bash:


$ git clone  git@git服务器IP地址:gb

image.png


###检查gb仓库是否clone过来了:

image.png


image.png



如上图所示,我们在windows客户端也测试成功,大家可以按我的步骤方法试一下,有问题的朋友可以留言一起探讨!!!

至于用MAC本客户端我就不演示了,我也没有买MAC本,哈哈。。。。



本文转自甘兵 51CTO博客,原文链接:http://blog.51cto.com/ganbing/2052985,如需转载请自行联系原作者

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章