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客户端上操作)


    


  • 生成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,如需转载请自行联系原作者

相关文章
|
3月前
|
监控 前端开发 Linux
centos7系统安装部署zabbix5.0
【9月更文挑战第23天】在CentOS 7系统上部署Zabbix 5.0的步骤包括:安装MariaDB数据库及必要软件包,配置Zabbix仓库,设置数据库并导入Zabbix数据库架构,配置Zabbix服务器与前端参数,启动相关服务,并通过浏览器访问Web界面完成安装向导。
176 0
|
3月前
|
Oracle Java 关系型数据库
CentOS 7.6操作系统部署JDK实战案例
这篇文章介绍了在CentOS 7.6操作系统上通过多种方式部署JDK的详细步骤,包括使用yum安装openjdk、基于rpm包和二进制包安装Oracle JDK,并提供了配置环境变量的方法。
289 80
|
2月前
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
207 0
虚拟机centos7.9一键部署docker
|
3月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
497 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
3月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
131 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
3月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
129 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
4月前
|
Linux 数据安全/隐私保护 网络虚拟化
centos7部署Pritunl
centos7部署Pritunl
|
26天前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
44 1
[Git]入门及其常用命令
|
2月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
120 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令