基于Gitolite的Git服务架设
如果不是要与他人协同开发,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服务架设的更多相关文章
- # 基于Gitolite搭建Git Server - 支持SSH&HTTP
		
Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...
 - [CentOS] 使用gitolite搭建git服务端
		
1. 创建用户 #创建gitadmin用户 useradd gitadmin #设置gitadmin密码 passwd gitadmin #创建git用户 useradd git #设置git密码 p ...
 - 在centos 下安装配置基于gitosis 的git 服务
		
前言 这里我用的系统是centos 6.2, 在服务器上的准备工作(服务器IP为10.0.2.8 ): 1.安装 openssh服务器与客户端工具 $ sudo yum install openssh ...
 - Gogs - 基于 Go 语言的自助 Git 服务
		
Gogs(Go Git Service) 是一个基于 Go 语言的自助 Git 服务.Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs ...
 - 基于Gitea搭建属于自己的Git服务
		
作者:IT王小二 博客:https://itwxe.com 一.搭建环境和前提 搭建环境: 操作系统:CentOS7.6 Docker版本:docker-ce-18.09.9 Lsky Pro版本:1 ...
 - 快速部署私人git服务--基于docker化Gogs
		
Gogs 一款极易搭建的自助 Git 服务. 环境 Linux系统 docker 获取gogs镜像,并运行, docker run -it --: -p : -v /var/gogs:/data go ...
 - 用Gitolite 构建 Git 服务器
		
转载 Gitolite 构建 Git 服务器 作者: 北京群英汇信息技术有限公司 网址: http://www.ossxp.com/ 版本: 0.1-1 日期: 2010-10-07 14:52:19 ...
 - Gitolite 构建 Git 服务器
		
Gitolite 构建 Git 服务器 Gitolite 构建 Git 服务器作者: 北京群英汇信息技术有限公司网址: http://www.ossxp.com/版本: 0.1-1日期: 2010-1 ...
 - gogs搭建git服务教程
		
使用gogs搭建自己的git服务!!! 一.GIT服务器搭建方式 上一节课我们讲过GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢? git支 ...
 
随机推荐
- boost::asio 之udp协议的使用
			
write by http://blog.csdn.net/bojie5744 bj_末雨 udp sender #include "stdafx.h" #include < ...
 - CSS中:before和:after选择器的用法
			
在线演示这次给大家带来的是对话气泡效果,主要是演示了 :before / :after 和 border 的用法,赶快来围观吧. 阅读原文:CSS中:before和:after选择器的用法
 - eclipse因为js validator无法通过导致build workspace失败
			
eclipse编译工程时时会validator js的errors和warnings,对于一些小型的项目,这当然没任何问题. 但是对于那些拥有大量js文件的web工程,js warnings通常会达到 ...
 - JAVA学习目录
			
开发环境以及IDE准备相关: 1.JAVA环境搭建 2.初次使用IntelliJ IDEA 3.IntelliJ IDEA界面设置 4.IntelliJ IDEA快捷键介绍 SprintBoot系列: ...
 - it-tidalwave-semantic-aux-1.0.13.jar下载
			
今天来给大家分一下一下自己认为还是挺不错的jar包下载网址,it-tidalwave-semantic-aux-1.0.13.jar,作为java开发人员可能时时刻刻都在跟jar包打交道,即使这会用不 ...
 - 使用JNDI连接数据库
			
第一步:实现一个Java类: package com.logistic.data; import java.sql.*;import javax.sql.*;import javax.naming.* ...
 - react-router-dom Link search 传参
			
<Link> 和之前版本没太大区别,重点看下组件属性: to(string/object):要跳转的路径或地址: replace(bool):为 true 时,点击链接后将使用新地址替换掉 ...
 - TCP 中出现RST的情况
			
http://www.360doc.com/content/13/0702/10/1073512_297069771.shtml 原 几种TCP连接中出现RST的情况 发表于1年前(2013-05-0 ...
 - UML基本架构建模--类的辅助信息
			
Organizing Attributes and Operations 组织属性和操作 When drawing a class, you don't have to show every attr ...
 - Python线程event
			
python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait.clear.set 事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 e ...