使用Gitolite搭建Gitserver

         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)

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



转载于:https://www.cnblogs.com/claireyuancy/p/7229837.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java任务分支和合并_合并/分支战略

我会给出与Adarsh Shah相同的建议,因为在大多数情况下,2个分支(MAIN,RELEASE)就足够了,并且使用feature branches用于你不想立即提交到MAIN的东西,因为它需要一段时间才能完全准备好测试 . 通过RELEASE,我指…

Spring安全:防止暴力攻击

Spring Security可以为您做很多事情。 帐户被封锁,密码盐。 但是蛮力阻断剂呢? 那是你必须自己做的。 幸运的是,Spring是一个非常灵活的框架,因此对其进行配置并不是什么大问题。 让我向您展示一些如何针对Grails应用程序执行…

NopCommerce计划任务

NopCommerce计划任务转载于:https://www.cnblogs.com/chenjz/p/6293210.html

简单谈谈js中的MVC

MVC是什么? MVC是一种架构模式,它将应用抽象为3个部分:模型(数据)、视图、控制器(分发器)。 本文将用一个经典的例子todoList来展开(代码在最后)。 一个事件发生的过程&a…

BTrace:Java开发人员工具箱中的隐藏宝石

这篇文章是关于BTrace的 ,我正在考虑将其作为Java开发人员的隐藏宝藏。 BTrace是用于Java平台的安全,动态跟踪工具。 BTrace可用于动态跟踪正在运行的Java程序(类似于DTrace,适用于OpenSolaris应用程序和OS)。 不久&am…

python 图片转视频ffmpeg_python图片转视频(opencv),ffmpeg压缩视频

要注意:1. 图片传视频要自己设置帧率和分辨率2.读取图片后分辨率要resize为和视频分辨率一样才可以3.写完.avi视频后视频比较大,用ffmpeg将avi视频压缩为mp4import cv2from cv2 import VideoWriter, VideoWriter_fourcc, imread, resizeimport osfrom su…

门面模式

门面模式的定义 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如 下: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface tha…

Mysql数据库申请

前段时间大部门下新成立了一个推广百度OCR、文字识别、图像识别等科技能力在金融领域应用的子部门。因为部门刚成立,基础设施和人力都是欠缺的。当时分到我们部门的任务是抽调一个人做新部门主站前端开发工作。本来说的是只负责页面的开发工作。当我参加过需求品审会…

Spring–添加SpringMVC –第2部分

在上一部分中,我们为经理和员工实现了控制器。 既然我们知道了解决方法,我们将做很少(但仅做很少)更复杂的事情–任务和时间表的控制器。 因此,让我们从org.timesheet.web开始。 TaskController 。 首先创建一个类&…

php 正则分隔_探讨PHP函数split()如何使用正则表达式切割字符串

对于初学者来说,掌握PHP中常用函数的用法,是其继续学习的基础。今天我们就为大家详细介绍有关PHP函数split()的一些使用方法,希望大家能通过这篇文章介绍的内容增加自己的知识库。说明array split ( string $pattern, string $string [, int …

通用的ProtostuffSerializer for Java

以前使用 protobuf或protostuff的时候觉得很麻烦,每个类都要单独定制,于是封装了一个类。 同事测试过,性能和压缩率都很好,尤其是相比json的序列化。 需注意:只支持Pojo类(即需要有get/set方法)…

SAS笔记(6) PROC MEANS和PROC FREQ

PROC MEANS和PRC FREQ在做描述性分析的时候很常用,用法也比较简单,不过这两个过程步的某些选项容易忘记,本文就梳理一下。 在进入正文前,我们先创建所需的数据集TEST_SCORES: DATA TEST_SCORES; INPUT COUNTY : $9. SC…

休眠:保存vs持久并保存或更新

save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hibernate中get和load方法之间的区别一样。 Hibernate Session类提供了几种通过save , saveOrUpdate和persist等方法将对象保存到数据库中的方法。…

php搜索数据库设计,PHP数据库搜索功能设计

其实搜索功能的设计很简单,几行代码就可以完成。下面是form表单。从表单发出的数据名为search,然后发送到../admin/article_SearchResult.php这个文件处理。下面讲下article_SearchResult.php这个文件如何实现搜索。$searchs $_POST[‘search‘];?>…

2016 Android Top 10 Library

过去的 2016 年,开源社区异常活跃,很多个人与公司争相开源自己的项目,让人眼花缭乱,然而有些项目只是昙花一现,有些项目却持久创造价值,为开发者提供了极大的便利,这些终究由时间来判断。今天&a…

集成JavaFX和Swing

我刚刚完成了对使用Swing的应用程序组件的重写,现在正在使用JavaFX,最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序,重写花了我一段时间,最后一切都很好,我很高兴自己做到了。 您可能想在…

提示错误:“应为“providerInvariantName”参数的非空字符串。”

我在调试Petapoco的T4模版的时候&#xff0c;链接一直报如题那个错误。在定性问题为配置文件后找的原因如下&#xff1a; <connectionStrings><add name"这个不行" connectionString"Data Sourcexxx;Initial Catalog数据库名;User ID帐号;Password密码…

php oop面试题,PHP面试题 - 对面向对象的理解

具体的题目应该是&#xff1a;什么是面向对象&#xff1f;主要的特征是什么&#xff1f;当然还有很多类似的题目&#xff0c;如果你说一下你对面向对象的理解&#xff0c;或者是你对比一下面向过程等等&#xff0c;诸如此类吧&#xff1f;如果我来回答这个问题&#xff0c;我会…

NOIP2014自测(晚自习两节+上午两节 共5个小时)

昨天刚刚考完试然后就翘晚自习跟今天上午两节课的语文和英语做做noip2014的题目。然后去评测了一番。首先day1day2的t1基本都是模拟&#xff0c;一看就出思路那种&#xff0c;直接ac掉。代码如下 day1t1&#xff1a;#include<iostream>#define maxn 209using namespace s…

您在eXo平台上的第一个Juzu Portlet

菊珠是佛教的佛珠。 一句话&#xff0c;我相信您已经学到了什么&#xff0c;印象深刻吗&#xff1f; 好的&#xff0c;我在这里不谈论佛教。 Juzu还是一个用于快速开发Portlet&#xff08;以及即将推出的独立应用程序&#xff09;的新框架。 您可以在Juzu网站上找到所需的所有…