一步一步教你搭建类似github的git服务器和Gitosis用户管理

一步一步教你搭建类似github的git服务器和Gitosis用户管理

一步一步教你搭建类似github的git服务器和Gitosis用户管理

github是一家免费托管源代码的商业公司,由于服务器在国外,所以国内访问有时很慢,另外对于国内的大公司而言,商业源码是高度保密的,不会放在github上,他们会自己搭建git服务器进行代码托管。

今天就给大家来讲讲如何搭建git服务器,今天我们在linux服务器上搭建

一、搭建git服务器

1、安装git

sudo apt-get install git

2、添加git用户

sudo adduser git

3、收集工作电脑的公钥文件id_rsa.pub,统一放到/home/git/.ssh/authorized_keys中,一行放一个

4、选定一个目录作为Git仓库,假定是/bfw/sample.git,在/bfw目录下输入命令:

sudo chown -R git:git sample.git

5、禁用shell登录

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行

git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

6、工作电脑克隆git仓库

$ git clone git@服务器ip或域名:/bfw/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

二、Gitosis管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

1、准备管理ssh公钥

登录git服务器,确保~/.ssh/authorized_keys 目录为空或不存在,确保你自己的工作电脑的公钥拷贝到 $HOME/YourName.pub

2、下载gitolite

git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin

3、以你的公钥作为管理员安装gitolite

gitolite setup -pk YourName.pub

如何上面的命令不能执行,请执行下面的命令

$HOME/bin/gitolite setup -pk YourName.pub

ok,gitolite安装好了,下面进行用户管理,注意:在进行用户管理时,比如确保git服务器上没有增加任何仓库和用户,防止gitolite无法进行托管

4、在工作电脑上执行:

git clone git@host:gitolite-admin

执行完后,我们发现在gitolite-admin目录下有2个子目录conf与keydir

conf中有gitolite.conf,是gitolite的配置文件

keydir是用户存放公钥的地方

现在我们想增加小王、小李及小张,让其对仓库test进行管理

先将小王的公钥wang.pub、小李的公钥li.pub及小张的公钥zhang.pub 放到keydir目录下

然后编辑conf目录下的gitolite.conf文件,增加如下面的文字

repo test
    RW+         =   wang
    RW          =   li
    R           =   zhang

5、下面来提交更改

git add conf
git add keydir
git commit -m "added test, gave access to alice, bob, carol"
git push

ok,下面来讲解一下gitolite的权限配置

repo foo
    RW+                     =   alice
    -   master              =   bob
    -   refs/tags/v[0-9]    =   bob
    RW                      =   bob
    RW  refs/tags/v[0-9]    =   carol
    R                       =   dave

对于foo这个仓库,alice可以做任何操作

blob可以创建和push除了master之外的分支,创建和push除了v+数字之外的标签

carol 创建和push除了v+数字之外的标签

dave只能clone和fetch

gitolite用户分组

@staff      =   alice bob carol
@interns    =   ashok

repo secret
    RW      =   @staff

repo foss
    RW+     =   @staff
    RW      =   @interns

gitolite用户分组组中组

@all-devs   =   @staff @interns

gitolite组合并

@staff      =   alice bob
@staff      =   carol
与下面效果一致
@staff      =   alice bob carol




{{collectdata}}

网友评论0