设为首页 收藏本站
查看: 1041|回复: 0

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

[复制链接]

尚未签到

发表于 2018-9-16 12:18:07 | 显示全部楼层 |阅读模式
  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
DSC0000.jpg

  2.5 生成ssh key(在git服务器上操作
  git需要使用ssh访问,需要生成一组ssh key,切换到git用户下操作:
  #su  git
  $ ssh-keygen -t rsa
DSC0001.jpg

  $cd .ssh/

  $ cp>  3、安装gitolite
  3.1 在git用户下创建bin目录(在git服务器上操作
  $ pwd
  /home/git/
  $ mkdir bin
  3.2 从远端克隆gitolite(在git服务器上操作
  $ git clone git://github.com/sitaramc/gitolite
DSC0002.jpg

  $ ls
DSC0003.jpg

  3.3 安装gitolite至bin目录(在git服务器上操作
  $ gitolite/install -to $HOME/bin
  $ cd bin/
  $ ls
DSC0004.jpg

  $ mv .ssh/authorized_keys  ~/git.pub
  $ ls
DSC0005.jpg

  $cd /home/git/
  $ ~/bin/gitolite setup -pk ~/git.pub
DSC0006.jpg

  $ ls
  bin  gitolite  git.pub  projects.list  repositories
  $ls repositories
DSC0007.jpg

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

  gitolite安装完成,从上面ls命令查到看,成功安装gitolite后,会自动生成一个“repositories”目录,此目录下面有两个默认的仓库。一个是testing.git用来测试、另一个gitolite-admin.git就是用来管理git用户和版本库,所以需要创建一个管理员git用户来管理。
  3.3 生成管理员仓库,不需要输入密码(在git服务器上操作)
  $ git clone  git@127.0.0.1:gitolite-admin
DSC0009.jpg

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

  $ cd gitolite-admin/
  $ ls
DSC00011.jpg

  $ls conf/
DSC00012.jpg

  $ls keydir/
DSC00013.jpg

  说明:进入管理员仓库后,可以看到“conf”、“keydir”这两个目录。
  conf/gitolite.conf:是添加用户、仓库的配置文件
  keydir:是放对应用户的公钥目录
  4、git客户端验证
  4.1 centos客户端验证(在centos客户端上操作)
  ###比如我用另一台centos服务器做为客户端,在上面创建用户ganbing做为git客户端的用户
  #yum -y install git
  #useradd  ganbing
  #passwd ganbing
DSC00014.jpg

  ###切换ganbing用户,生成公钥,并把公钥拷贝到git服务器的"gitolite-admin"仓库中
  # su - ganbing
  $ ssh-keygen  -t rsa
DSC00015.jpg

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

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

  •   添加仓库和用户(在git服务器上操作):
  ###在git服务器keydir目录中可以看到,git客户端ganbing的公钥已经拷贝过来了:
  $ ls keydir/
DSC00017.jpg

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

  上面的含义是:
  第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"
DSC00019.jpg

  $ git push  origin master
DSC00020.jpg

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


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

  提示:上面的警告不用管,它告诉你克隆的一个空的仓库,因为gb仓库本身啥也没有
  ###ls查看gb仓库已经clone过来了:
  $ls
DSC00023.jpg

  ###进入gb仓库,你添加个a.txt文件提交上去:
  $ touch a.txt
  $ git add .
  $ git commit  -m "add file a.txt"
DSC00024.jpg

  $$ git push origin master
DSC00025.jpg

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

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


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

  如上图所示:我这台电脑已经生成过,所以我输入n,这里也指明公钥的路径((/c/Users/Administrator/.ssh/id_rsa))
  ###进入.ssh目录,把id_rsa公钥拷贝到服务器,并把公钥重命名为windows_ganbing.pub:
  $ cd /c/Users/Administrator/.ssh/

  $ scp>
DSC00028.jpg

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

  •   然后,进入git服务器(在git服务器上操作)
  ###先在服务器上查看windows_ganbing.pub公钥拷贝过来了没有:
  $ cd /home/git/gitolite-admin/keydir/
  $ls
DSC00029.jpg

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

  提示:上面用户之间用空格隔开就可以,你的公钥文件是什么名字,这里就输入什么名字
  ###提交修改,上面说过了,用3条命令搞定:
  $ git add .
  $ git commit  -m "add user windows_ganbing"
DSC00031.jpg

  $ git push origin master
DSC00032.jpg


  •   最后,git clone进行验证(在windows客户端上操作):
      还是进入D盘-testgit目录,打开Git Bash:
  $ git clone  git@git服务器IP地址:gb
DSC00033.jpg

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


  如上图所示,我们在windows客户端也测试成功,大家可以按我的步骤方法试一下,有问题的朋友可以留言一起探讨!!!
  至于用MAC本客户端我就不演示了,我也没有买MAC本,哈哈。。。。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584528-1-1.html 上篇帖子: git记住用户名密码 下篇帖子: git 使用SSH
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表