zoukankan      html  css  js  c++  java
  • 使用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)

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



  • 相关阅读:
    .NET中的一些设计模式
    (原创)无废话C#设计模式之三:Abstract Factory
    一步一步学Linq to sql(一):预备知识
    使用主题来自动包装控件样式
    (原创)无废话C#设计模式之六:Builder
    (原创)无废话C#设计模式之四:Factory Method
    当前匿名用户和当前连接的区别
    单一登陆的例子
    使用rar.exe压缩的例子
    (原创)无废话C#设计模式之九:Proxy
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6845787.html
Copyright © 2011-2022 走看看