linux 下gitolite服务器搭建

1.在服务器端创建专用帐号,所有用户通过此帐号访问git库,一般方便易记,选择git作为专用帐号名称。
$sudo adduser --system --shell /bin/bash --group git
添加git用户到ssh用户组中
$sudo adduser git ssh
为git用户设置口令,当整个git服务配置完成,最好取消git口令,只允许公匙认证。
$sudo passwd git
 2.到管理员主机将管理员公匙添加到服务器主机的.ssh/authorized_keys文件中,建立新的公匙认证,如:
$ssh-copy-id -i .ssh/<filename>.pub  git@server

3.服务器切换到git用户
$su git
安装gitolite
$sudo apt-get install gitolite
执行gitolite安装
$gl-setup  /<filename>.pub 以管理员公匙安装gitolite
安装过程会询问是否修改配置文件,一般会自动打开vi编辑.gitolite.rc文件。有些配置需要修改
$REPO_BASE="repositories"
用于设置Git服务器的根目录,缺省是git用户主目录下的repositories目录,可以使用绝对路径。所有git库都
部署在该路径下。
$REPO_UMASK=0007;#gets you 'rwxrwx--'
版本库创建使用的掩码。即新建立的版本库权限为‘rwxrwx’
$GL_BIG_CONFIG=0
如果授权文件非常复杂,更改此项配置为1,以免产生庞大的授权编译文件。
$GL_DILDREPOS=1
支持通配符版本库授权。
退出保存。
如果安装时没有配置,后续可以打开git用户跟目录下.gitolate.rc文件配置。

4.管理gitolite
当gitolite安装完成后,在服务器端创建了一个用于管理gitolite的库gitolite-admin.git

切换到管理员主机  $git clone git@server:gitolite-admin.git
$cd gitolite-admin
$ls -F
conf/   keydir/
$ls /conf
gitolite.conf
$ls keydir/
<filename>.pub
我们可以看出gitolite-admin目录下有两个目录conf/和keydir/.
keydir/<filename>.pub文件
目录keydir下初始时只有一个用户公匙,及管理员用户的公匙。
conf/gitolite.conf文件
该文件为授权文件,初始内容为
#gitolite conf
# please see conf/example.conf for details on syntax and features

repo gitolite-admin
    RW+                 = admin

repo testing
    RW+                 = @all

缺省授权文件中只设置了两个版本库的授权:

    gitolite-admin

    即本版本库(gitolite管理版本库)只有 admin 用户有读写和强制更新的权限。

    testing

    缺省设置的测试版本库,设置为任何人都可以读写以及强制更新。

5.增加新用户
只用将信用户的公匙添加到gitolite-admin版本库的Keydir目录下,即完成新用户的添加。如:
$ cp /path/to/dev1.pub keydir/
$ cp /path/to/dev2.pub keydir/
$ cp /path/to/jiangxin.pub keydir/
执行 git add 命令,将公钥添加入版本库。

$ git add keydir
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   keydir/dev1.pub
#       new file:   keydir/dev2.pub
#       new file:   keydir/jiangxin.pub
#
$ git commit -m "add user: jiangxin, dev1, dev2"
[master bd81884] add user: jiangxin, dev1, dev2
 3 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 keydir/dev1.pub
 create mode 100644 keydir/dev2.pub
 create mode 100644 keydir/jiangxin.pub

执行 git push,同步到服务器,才真正完成新用户的添加。

$ git push
Counting objects: 8, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1.38 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Already on 'master'
remote:
remote:                 ***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in the config file:
remote: dev1(dev1.pub),dev2(dev2.pub),jiangxin(jiangxin.pub)

6.更改授权
新用户添加完毕,可能需要重新进行授权。更改授权的方法也非常简单,即修改 conf/gitolite.conf 配置文件,提交并 push。

    管理员进入 gitolite-admin 本地克隆版本库中,编辑 conf/gitolite.conf 。

    $ vi conf/gitolite.conf

    授权指令比较复杂,我们先通过建立新用户组尝试一下更改授权文件。

    考虑到之前我们增加了三个用户公钥之后,服务器端发出了用户尚未在授权文件中出现的警告。我们就在这个示例中解决这个问题。

        例如我们在其中加入用户组 @team1,将新添加的用户 jiangxin, dev1, dev2 都归属到这个组中。

        我们只需要在 conf/gitolite.conf 文件的文件头加入如下指令。用户之间用空格分隔。

        @team1 = dev1 dev2 jiangxin
编辑结束,提交改动。

$ git add conf/gitolite.conf
$ git commit -q -m "new team @team1 auth for repo testing."

执行 git push ,同步到服务器,才真正完成授权文件的编辑


7.创建仓库示例
在conf/gitolite.conf中添加类似下面的内容进去
repo notes
  PW = <filename>
保存,提交,并推送到服务器
git add -u
git commit -m 'add new repo notes '
git push
推送的时候应该看到类似这样的信息

Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 395 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Initialized empty Git repository in /home/git/repositories/notes.git/
To git@desktop:gitolite-admin
   6de90b8..52737aa  master -> master

注意remote开头的一行,它已经帮你创建了这个仓库

通配符创建仓库示例
通配符仓库事先不能确定名字,所以不会帮你创建,在你clone的时候才会创建

编辑conf/gitolite.conf文件在里面加入类似下面的内容

repo e2source/.+$
  C      =   <filename>
  RW+C   =   <filename>

注意C = username的一行必不可少,这里的C是指创建仓库的意思,下一行的RW+C中的C是指创建引用(branch,tag)的意思

保存后提交并推送到服务上去

git add -u
git commit -m 'add wildcard repo'
git push

注意看push时输出的信息,应该没有创建仓库的信息

这时filename克隆仓库的时候会自动创建

# as filename user
git clone git@server:e2source/enigam2-plugins.git

输出应该类似这样

Cloning into 'enigam2-plugins'...
Initialized empty Git repository in /home/git/repositories/e2source/enigam2-plugins.git/
warning: You appear to have cloned an empty repository.

如果你的输出报这样的错

FATAL: R any e2source/enigam2-plugins jenny DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly

一般是没有C = username这一行,注意是只有C的一行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值