Gitolite是一款Perl语言开发的Git服务管理工具。通过公钥对用户进行认证。并可以通过配置文件对些操作进行基于分支和路径的精细控制。

Gitolite採用的是SSH协议而且使用SSH公钥认证。因此不管是管理员还是普通用户。都须要对SSH有所了解。Gitolite的官网是:https://github.com/sitaramc/gitolite。以下就来细说使用Gitolite搭建Gitserver的过程吧。

硬件需求:Ubuntu电脑(或虚拟机)。正常网络訪问。

软件需求:git-core,gitolite, openssh-server, git-daemon-run(ubuntu),msysgit(windows)

在Gitolite的搭建过程中,Gitweb、Apache不是必须的,Gitweb、Apache跟Gitolite一起使用。看到的效果类似于 http://git.chromium.org/gitweb/

1. 安装配置Gitserver(IP:10.203.138.129)

安装Git和openssh。

$ sudo apt-get install git-core openssh-server

         新建用户git,该用户作为全部代码仓库和用户权限的管理者。

$ sudo groupadd git

         $ sudo useradd git –g git –m

         $ sudo passwd git (须要设置用户git的password)

2. 下载gitolite

初始化server的全局设置,为安装gitolite做准备。

在不论什么一台机器上使用git。第一次必需要先设置user.name和user.email。

$ git config --global user.name “david”

         $ git config --global user.email “david@server-pc”(name和email任意)

安装一下python的setup tool。

$ sudo apt-get install python-setuptools

获取gitolite包。

$ git clone https://github.com/sitaramc/gitolite.git(或者到网上下载相应的gitolite)

        当然,我们也能够使用包管理器进行安装。

        $ sudo aptitude install gitolite



3. 配置gitolite

在git管理员的PC上,先安装msysgit(windows系统)。安装后,打开gitbash。执行例如以下命令生成管理员密钥:

$ ssh-keygen –t rsa

         执行以上命令后。能够默认提示直接回车。回车后在当前用户文件夹下生成了.ssh/id_rsa和.ssh/id_rsa.pub。

当中.ssh/id_rsa是私玥,.ssh/id_rsa.pub是公钥。接下来能够使用例如以下命令将git管理员的公钥上传到gitserver。也能够直接复制到gitserver。

$ scp xxx/.ssh/id_rsa.pub webgod@10.203.138.129:/tmp/admin.pub


         回到Gitserver上。

$ sudo chmod a+r /tmp/id_rsa.pub

         运行Gitolite安装。

         $ gl-setup /tmp/admin.pub

         Initialized empty Git repository in /home/repo/gitolite-admin.git/

Reinitialized existing Git repository in /home/repo/gitolite-admin.git/

         Gitolite是通过一个git仓库来管理配置文件。仓库放在/home/git/repositories/gitolite-admin.git。

设置git仓库权限

$ sudo chown git:git /home/git/repositories

         $ sudo chmod 755 /home/git/repositories

         $ sudo chmod 755 /home/git/repositories/gitolite-admin.git/hooks/post-update

4. 在server上新建測试项目仓库

在server上新建一个空的项目仓库可。叫“test”。

切换到git用户:

$ su – git

         $ cd repositories

         $ git init --bare test.git

         $ exit

         到这里,test仅仅是一个空仓库。它是不能clone下来的。

为了能做clone,必须先让管理员或有权限的人放一个初始化的版本号到仓库中。

所以,我们必须先改动一个gitolite-admin。

5. 管理gitolite的配置文件

Gitolite本身的配置也是通过git来实现的。

在刚刚上传公钥的机器上,把gitolite-admin.git这个仓库clone下来,就能够以管理员的身份改动配置了。

新建一个目录,如git129:

$ mkdir git129

         $ cd git129

         $ git clone git@10.203.138.129:gitolite-admin.git(或使用全路径)

注:訪问git用户仓库的默认路径是/home/git/repositories/

$ cd gitolite-admin

         该文件夹下的keydir文件夹是用来存放全部须要訪问gitserver的用户的ssh公钥。

各个用户依照前面提到的办法生成各自的ssh公钥文件后,把全部人的ssh公钥文件按名字又一次命名一下,然后复制到keydir文件夹下,然后改动gitolite.conf文件,做对应的配置:

[gitolite]

         [group gitolite-admin]

         writable = gitolite-admin

         members = david@DAVID-PC  tom@TOM-PC

         [group team]

         writable = test

         members = david@DAVID-PC  tom@TOM-PC  pitter@PITTER-PC

         这个配置文件表达了例如以下含有:gitolite-admin组成员有david,tom,该组对gitolite-admin仓库有读写权限;test组有david,tom,pitter三个成员,该组对test仓库有读写权限。眼下这些配置文件的改动仅仅是在本地,必须推送到远程的gitserver上才干真正生效。

增加新文件、提交并push到Gitserver:

$ git add .

         $ git commit –m “add test and someusers”

         $ git push origin master

$ sudo chmod a+r /tmp/id_rsa.pub

6. 初始化測试项目

如今server搭建完成,而且有一个空的项目test在server上。接下来,须要測试一下,空仓库是不能clone的。所以须要某个有写权限的人初始化一个版本号。

在client运行:

$ mkdir test-ori

         $ cd test-ori

         $ git init (在client运行,初始化一个本地的版本号库)

$ echo “/* add something */” > hello.c

         $ git add .

         $ git commit –m “initial version”

         $ git remote add origin git@10.203.138.129:test.git

         $ git push origin master

         到此为止,test已经有了一个版本号了,team的其它成员仅仅要先clone一下test仓库就能够了。并且gitolite.conf中赋予的读写权限。

7. 加入已有git项目

假设想将一个现成的git仓库,放到Gitserver上供team使用(比方clone了一个官方的kernel仓库,想在内部使用它作为基础仓库)。能够这样操作:

首先须要从你的工作仓库中得到一个纯仓库。比方你的工作文件夹为~/kernel,你想将该纯仓库复制到Gitserver上使用。Gitserver的管理员拿到这个纯仓库(~/kernel)后,将其复制到/home/repo/下,同一时候配置gitolite相关配置文件。比方说:下载ALSA库。

$ git clone git://android.git.kernel.org/platform/external/alsa-lib.git

$ git clone git://android.git.kernel.org/platform/external/alsa-utils.git

         生成bare库:

$ git clone --bare alsa-lib alsa-lib.git

         $ git clone --bare alsa-utils alsa-utils.git

         将bare库移动到Gitserver文件夹:

$ cp alsa-lib.git /home/repo

注意变更全部者。以获取提交权限。

 
       $ chown -R git alsa-lib.git





8. Gitweb和Git Daemon的支持


         Gitolite和Gitweb的整合提供了两个方面的内容。一个是能够设置版本号库的描写叙述信息,用于在Gitweb项目列表中显示。还有一个则是自己主动生成项目的列表文件共Gitweb參考,避免Gitweb使用低效率的文件夹递归搜索查找Git版本号库列表。

能够在授权文件里设定版本号库的描写叙述信息,并在gitolite-admin管理库更新时创建到版本号库的description文件里。

         repo name = "one
line of description"
         repo name "owner
name" = "one line of description"
         第一行为名为reponame的版本号库设定描写叙述。
         第二行同一时候设定版本号库的属主名称,以及一行版本号库描写叙述。

         对于通配符版本号库。使用这样的方法就不现实了。Gitolite提供了SSH子命令共版本号库的创建者使用。
         $ ssh git@server
setdesc path/to/repo.git
         $ ssh git@server
getdesc path/to/repo.git
         第一条指令用于设置版本号库的描写叙述信息。
         第二条指令显示版本号库的描写叙述信息。

         Git服务由git-daemon的服务软件提供。

尽管git-daemon能够支持写操作,但由于git-daemon没有提供认证支持。因此非常少人会配置git-daemon来提供匿名的写服务。

使用git-daemon提供的Git版本号库仅仅读服务效率非常高。

故,git-daemon一直是Git版本号库仅仅读服务的首选。

假设想使用git协议,那么就须要安装git-daemon。

$ sudo apt-get install git-daemon-run

         编辑git-daemon配置文件:

$ sudo gedit /etc/sv/git-daemon/run

        

#!/bin/bash

exec2>&1

echo‘git-daemon starting.’

execchpst -ugitdaemon

“$(git--exec-path)”/git-daemon --verbose --export-all--enable=receive-pack --enable=upload-pack --enable=upload-archive --reuseaddr --base-path=/home/webgod/

说明:

--base-path      指向Gitserver的根文件夹

--enable=receive-pack

--enable=upload-pack

--enable=upload-archive

以上三个是与git-clone,git-push。git-pull相关的。

查看详情使用命令:$ man git-daemon查看。

重新启动gitserver:

$ sudo sv restart git-daemon

         在Gitserver上:

$ cd /home/webgod

         $ mkdir RepoServer

         $ cd RepoServer

         $ git init --bare manifest.git

        

         切换到其它文件夹:

$ cd ~/test

         $ git clonegit://127.0.0.1/RepoServer/manifest.git

         (è $ git clone git@127.0.0.1:/home/webgod/RepoServer/manifest.git)

这里就实现了所谓的“匿名訪问”。


使用Gitolite搭建Gitserver的更多相关文章

  1. # 基于Gitolite搭建Git Server - 支持SSH&HTTP

    Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...

  2. 版本号控制-搭建gitserver

    GitHub是一个免费托管开源码的Gitserver,假设我们不想公开项目的源码,又不想付费使用.那么我们能够自己搭建一台Gitserver. 以下我们就看看,怎样在Ubuntu上搭建Gitserve ...

  3. 使用gitolite搭建Git服务器

    使用gitolite搭建Git服务器 运行环境 Ubuntu18.04 gitolite 搭建过程 安装好Ubuntu18.04系统 更新系统 sudo apt update sudo apt upg ...

  4. 用Gitolite搭建服务器上的Git

    使用git作为版本控制工具,确实非常流行且好用,常用的git代码服务器有Github还是国内的Gitcafe和OSC都是很不错,可以免费存放一些开源的项目代码,对于私人项目,则需要支付一定的费用.同时 ...

  5. 使用Gitolite搭建轻量级的Git服务器

    By Harrison Feng在Git服务管理工具这个领域,主要有三种流行的方案,它们分别是 Gitosis - 轻量级, 开源项目,使用SSH公钥认证,只能做到库级的权限控制.目前项目已经停止开发 ...

  6. [CentOS] 使用gitolite搭建git服务端

    1. 创建用户 #创建gitadmin用户 useradd gitadmin #设置gitadmin密码 passwd gitadmin #创建git用户 useradd git #设置git密码 p ...

  7. [原]五分钟搭建gitserver

    本来在忙一些事情,结果刚才突然收到一个临时的事情,号称很着急. 问了一下,原来是需要在本地搭建一个git库,但其实之前我是有做过gitserver的,不过是在阿里云(部分分布在青云)上,而且目前在使用 ...

  8. CentOS 7下使用Gitolite搭建Git私服

    1. 搭建环境 CentOS7, git version 1.8.3.1 2. 安装依赖包 yum install curl-devel expat-devel gettext-devel opens ...

  9. 用gitolite搭建git server

    在Ubuntu上测试安装一下git server,为后面项目的代码管理做准备.记录流水账如下, 中间关于git 命令的使用说明不做过多解释,需要了解的请google或者直接git help: 我用到了 ...

随机推荐

  1. os.path.isfile的错误

    今天写了一个程序,读取子目录(source)下的所有文件,然后转换. 程序一部分代码如下: def DtoTab(dsrc, dtarget): try: for item in os.listdir ...

  2. 第二步:开发工具Eclipse安装并汉化

    打开下载官网:www.eclipse.org.点击下载(download英文)然后就是安装步骤了,还是一样一直的点击下一步,默认安装到C盘.如下图: 汉化步骤: 1.打开www.eclipse.org ...

  3. C#发送POST,GET,DELETE请求API,并接受返回值

    发送POST请求 /// <summary> /// API发送POST请求 /// </summary> /// <param name="url" ...

  4. 计蒜客 25985.Goldbach-米勒拉宾素数判定(大素数) (2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 B)

    若干年之前的一道题,当时能写出来还是超级开心的,虽然是个板子题.一直忘记写博客,备忘一下. 米勒拉判大素数,关于米勒拉宾是个什么东西,传送门了解一下:biubiubiu~ B. Goldbach 题目 ...

  5. UVA 624 CD【01背包+路径记录】

    You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is o ...

  6. NMAP输出结果中CPE的含义

    NMAP输出结果中CPE的含义   CPE全称是Common Platform Enumeration,意思是通用平台枚举项.它是NMAP对识别出来的软件.操作系统和硬件的一种命名方式.它的格式如下: ...

  7. cf 546C Soldier and Cards

    题目链接:C. Soldier and Cards Two bored soldiers are playing card war. Their card deck consists of exact ...

  8. 四. Java继承和多态2. Java super关键字

    super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...

  9. CRUD_PreparedStatement

    package songyan.jdbc.crud; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...

  10. php安装扩展步骤(redis)

    星哥让装一个扩展,解决PDF抓PNG的问题,功能没有实现,有点小悲伤,但是还是学到点东西的. php安装扩展步骤(以redis为例) 前提注意:在自己的LINUX本机上一定要安装有redis软件,我之 ...