如果不是要与他人协同开发,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

本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2014-02/96991.htm

基于Gitolite的Git服务架设相关推荐

  1. xubuntu 搭建基于 gitolite 的 git 服务器

    搭建一个支持repo管理的android镜像,repo工具是基于git服务器,实践git 服务器的安装. Git 服务器的选择 git服务器有多个选择,gitolite,gitosis,gerrit, ...

  2. 在centos 下安装配置基于gitosis 的git 服务

    前言 这里我用的系统是centos 6.2, 在服务器上的准备工作(服务器IP为10.0.2.8 ): 1.安装 openssh服务器与客户端工具 [plain] view plaincopy $ s ...

  3. git项目初始上传服务器,快速架设一个使用 SSH 的 Git 服务

    Git 是非常流行的分布式版本控制工具,很早以前就从 Subversion 转到 Git 了.现在每天用的 Xcode日常开发,测试和应用部署也都是使用 Git,而且除了版本控制功能之外,也可以使用 ...

  4. 基于gitolite搭建轻量级git服务器

    原文地址:http://lisongze.com/2018/09/01/gitolite-gitserver/ or http://lisongze.cn/2018/09/01/gitolite-gi ...

  5. linux配置中心自动化,centos下搭建git服务 基于git服务配置自动化部署 遇到的Linux知识补充...

    安装 git su root yum install -y git 添加 git 用户,用于管理/使用 git 服务/仓库 创建用户 git # 添加名为git的用户, 并且会默认创建一个名为git的 ...

  6. Gitolite 构建 Git 服务器

    参考 Gitolite 构建 Git 服务器 steps: $ sudo adduser --system --shell /bin/bash --group git $ cp .ssh/id_rsa ...

  7. 搭建企业私有Git服务

    一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支持的四种通信协议: Local(本地协议 ...

  8. tl02-搭建企业私有GIT服务

    GIT远程通信协议详解 基于gogs 搭建WEB管理服务 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通 ...

  9. git为私有仓库设置密码_我搭建了一套企业级私有Git服务,抗住了每天上万次攻击!...

    写在前面 事情是这样的,今年疫情期间,我在某云购买了一套服务器,做什么呢?不是用来部署项目,也不是用来搭建网站,而是用来做代码备份和管理.没错,都是我个人的代码,也许你会说,你个人能有多少代码啊?确实 ...

最新文章

  1. dockerfile COPY ADD 命令
  2. 百度2014校园招聘笔试题(成都站,软件研发岗)——2014.09.21
  3. JavaScript进阶4-学习笔记
  4. html 输入框从左上角,在输入框的左上角,使文本开始_input_开发99编程知识库
  5. 进程的挂起以及可重入函数
  6. 用php判断大月小月,php 获取月第一天和最后一天 | 学步园
  7. [转]Windows环境中使用版本管理工具 Git
  8. redisconnectionfactory 没有这个bean_浅析Spring中bean的作用域
  9. Julia : 用@async提升循环性能
  10. 利用WinDriver开发PCI设备驱动程序
  11. 大型文件传输慢、传输中断怎么办?
  12. 不禁网页的浏览器_什么浏览器不屏蔽网站
  13. 啦啦啦啦啦啦啦啦啦啦啦啦这是一篇分界线
  14. kafka connector使用(Docker一键启动版)
  15. Linux部署war包项目
  16. opencv findContours()轮廓特征分析大全(求面积、周长、几何矩、质心、凸包、最小外接矩形、最小外接三角形、最小外接椭圆等)
  17. 【均匀分布和正态分布】
  18. CSIP发布软件自主创新评估系统平台
  19. 关于时间、物质结构、四维空间的猜想
  20. 我学会了用计算机作文,我学会了用计算机

热门文章

  1. [Linux] set dev label(设置分区卷标)
  2. android textview改变部分文字的颜色和string.xml中文字的替换及部分内容设置颜色、字体、超链接、图片...
  3. 阵列卡缓存电池充放电问题详解
  4. Java-ORM数据库框架CDM介绍
  5. php5.3.3下安装ffmpeg
  6. OSChina 周二乱弹 ——在影楼工作的妹子,可追不?
  7. 开源在线阅读技术资源
  8. [布局] bootstrap基本标签总结
  9. 自己制作 SPx N合1 自动安装盘(x86)
  10. Parallel Python实现程序的并行多cpu多核利用【pp模块】