阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Gitolite的Git服务架设

434次阅读
没有评论

共计 4781 个字符,预计需要花费 12 分钟才能阅读完成。

如果不是要与他人协同开发,git 根本不需要架设服务器,git 可以直接使用本地版本库的路径完成 git 版本间的操作。但是如果需要和他人分享版本库,协作开发,就需要能够通过网络协议操作 git 库。git 支持的协议很丰富,架设服务器的选择也很多,不同的方案有着各自的公优缺点。本文就以 gitolite 为例构建一个高效的多人协作的 git 服务器。

环境:

git 客户端 test.cmmobi.com(172.16.5.202),git 服务器为 git.cmmobi.com(172.16.5.200)。配置好 /etc/hosts 文件,以让其可互相解析

cat /etc/hosts

172.16.5.202 test.cmmobi.com
      172.16.5.200 git.cmmobi.com

客户端配置(test.cmmobi.com 上的配置)
  创建用户,并生成密钥对,在此为方便测试,就不再另外创建用户,直接使用 root 用户即可。
      cd /root
      mkdir .ssh
      ssh-keygen -f ~/.ssh/admin
  将生成的公钥上传到 git 服务器的 /tmp 目录以备用
      scp ~/.ssh/admin.pub root@git.cmmobi.com:/tmp
  创建访问 git 服务时的配置文件
      cat ~/.ssh/config
          host gitolite #git 服务器别名
              user git #服务端管理 gitolite 的用户
              hostname git.cmmobi.com #git 服务器的主机名
              port 22 #访问 git 服务器时的端口号
              identityfile ~/.ssh/admin #访问 git 服务器时使用的公钥文件
  chmod 600 ~/.ssh/config

服务端配置 (git.cmmobi.com 上的配置)
  服务要求:
      1. 任意的 unix 系统
      2.shell 环境
      3.git 版本为 1.6.6 及以上
      4.perl 版本为 5.8.8 及以上
      5.openssh 版本为 5.0 及以上
  安装:
      1. 使用 root 用户登陆服务器,并创建 git 用户, 用以管理 git 服务
          useradd git
          echo “git” | passwd git –stdin
      2. 切换到 git 用户,并确保~/.ssh/authorized_keys 文件为空或者不存在
      3. 执行安装操作:
          git clone git://github.com/sitaramc/gitolite #下载 gitolite 软件
          mkdir -p $HOME/bin
          gitolite/install -to $HOME/bin #安装 gitolite
          export PATH=$PATH:$HOME/bin
          echo “PATH=$PATH:$HOME/bin” >> .bashrc
          gitolite setup -pk /tmp/admin.pub #将客户端的 root 用户配置为 git 的管理员
如果在执行 gitolite/install -to $HOME/bin 时报如下错误:
          Can’t locate Time/HiRes.pm in @INC (@INC contains: /home/git/gitolite/src/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/git/gitolite/src/lib/Gitolite/Common.pm line 74.
          BEGIN failed–compilation aborted at /home/git/gitolite/src/lib/Gitolite/Common.pm line 74.
          Compilation failed in require at ./install line 15.
          BEGIN failed–compilation aborted at ./install line 15.
      需要安装 perl-Time_HiRes:
          yum install -y perl-Time-HiRes

安装完成后,我们可以在 $HOME 下看到一个 repositories 目录,里面有两个仓库,分别为 gitolite-admin 和 testing, 其中 gitolite-admin 为管理仓库。
在客户端通过 root 用户克隆 gitolite-admin 库
  git clone gitolite:gitolite-admin
进入 gitolite-admin 仓库,会看到两个目录,分别为 keydir 和 conf, 其中 keydir 目录用来管理用户,在其中可以看到默认有一个文件叫做 admin.pub,正是我们之前生成的管理用户的公钥文件。下面我们再添加一个用户 breezey:
  useradd breezey
  echo “breezey” | passwd breezey –stdin
  su – breezey
  mkdir .ssh
  ssh-keygen -f .ssh/breezey
  vim .ssh/config
      host gitolite
          user git
          hostname git.cmmobi.com
          port 22
          identityfile ~/.ssh/breezey
  su – root #切换回管理用户
  cp /home/breezey/.ssh/breezey.pub /root/gitolite-amdin/keydir
  cd /root/gitolite-admin
  git add keydir
  git status
  git config –global user.email “breezey@cmmobi.com”
  git config –global user.name “breezey”
  git commit -a “add user:breezey”
  git push
  su – breezey #再切换到 breezey 用户
  git clone gitolite:testing #克隆 testing 仓库,这时已经可以成功克隆。
我们可以进入到 testing 库中,创建一个测试文件并提交:
  cd testing
  echo “Hello World” > welcome.txt
  git add *
  git commit -m “a new file:welcome.txt”
  git push
当我们第一次提交并执行 git push 时,会出现如下错误:
  No refs in common and none specified; doing nothing.
  Perhaps you should specify a branch such as ‘master’.
  fatal: The remote end hung up unexpectedly
  error: failed to push some refs to ‘gitolite:test1’
出现这个问题的原因,是因为 git 找不到你要提交的版本,可以使用如下命令:
  git push origin master

Gitolite 授权详解
前文我们提到,在 gitolite-admin 的管理仓库中有两个目录,其中 keydir 目录为管理用户的目录,而另外一个 conf 目录里,有一个叫作 gitolite.conf 的配置文件,此文件即是管理仓库及用户授权的文件。
我们先来看一个该配置文件的示例:
1 @admin = breezey chenliang
2 repo gitolite-admin
3 RW+ = breezey
4 repo ossxp/.+
5 C = @admin
6 RW = @all
7 repo testing
8 RW+ = @admin
9 RW master = junio
10 RW+ pu = junio
11 RW cogito$ = pasky
12 RW bw/ = linus
13 – = somebody
14 RW tmp/ = @all
15 RW refs/tags/v[0-9] = junio
我们先对该示例文件作一个简单的说明, 以方便大家对授权文件有一个基本的了解:
第 1 行定义了一个 admin 的组,该组里包含两个用户,分别是 breezey chenliang
第 2 - 3 行定义了一个版本库 gitolite-admin,并且指定 breezey 用户对 gitolite-admin 仓库拥有读 (R),写(W) 和强制更新 (+) 的权限
第 4 行通过正则表达式定义了一组版本库,即 ossxp 目录下的所有版本库
第 5 行定义 admin 组的用户可以在 ossxp 目录下创建版本库
第 6 行定义所有用户对 ossxp 目录下的版本库拥有读写的权限,但不能强制更新
第 7 行定义了一个版本库 testing
第 8 行定义了 admin 组用户对 testing 库的所有分支和 tag 拥有读、写、重置、添加、删除的权限
第 9 行定义 junio 用户对 master 分支有读写的权限,还包括以 master 开头的所有分支。
第 10 行定义 junio 用户对 pu 分支拥有读写,重置,添加,删除的权限,还包括以 pu 开头的所有分支
第 11 行定义 pasky 用户对 cogito 分支拥有读写的权限,仅此分支,精确匹配
第 12 行定义 linus 用户对 bw/ 拥有读写的权限
第 13 行定义 somebody 用户对 testing 仓库有写的权限
第 14 行定义所有用户对 tmp/ 拥有读写的权限
第 15 行定义 junio 可以读写任意 tag,包括以 v 加上数字开头的 tag

组的定义:
@admin = breezey chenliang
@user = @admin @staff user1
版本库的定义:
repo ossxp/.+ #匹配 ossxp 目录下的所有版本库
repo myrepo.$ #匹配以 myrepo. 结尾的版本库
repo sandbox/test1 #创建 sandbox 下的 test1 库
授权关键字:
C:
C 代表创建。仅在符版本库授权时可以使用。用于指定谁可以创建与通配符匹配的版本库。
R,RW,RW+:
R 为只读,RW 为读写,RW+ 为读写及强制 push
RWD,RW+D:
只有当授权指令中定义了正则引用(正则表达式定义的 branch、tag 等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(branch or tag)
RWCD,RW+CD:
只有当授权指令中定义了正则引用(正则表达式定义的 branch、tag 等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(branch or tag),D 的含义是允许删除和正则引用匹配的引用(branch or tag)
-:
减号 (-) 是一条禁用指令,只对写操作起作用,不会对用户的读操作施加影响。

Git 的详细介绍:请点这里
Git 的下载地址:请点这里

推荐阅读

Fedora 通过 Http Proxy 下载 Git http://www.linuxidc.com/Linux/2009-12/23170.htm

在 Ubuntu Server 上安装 Git http://www.linuxidc.com/Linux/2009-06/20421.htm

服务器端 Git 仓库的创建(Ubuntu)http://www.linuxidc.com/Linux/2011-02/32542.htm

Linux 下 Git 简单使用教程(以 Android 为例)http://www.linuxidc.com/Linux/2010-11/29883.htm

Git 权威指南 PDF 高清中文版 http://www.linuxidc.com/Linux/2013-10/91053.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4781字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7965975
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...