gitosis搭建

一、安装python环境python

二、git

git clone git://eagain.net/gitosis.git//该仓库有问题

换新仓库:git clone https://github.com/res0nat0r/gitosis.gitgithub

cd gitosis
sudo python setup.py install

三、修改/home/git/.ssh/authorized_keys文件名,保证不存在该文件服务器

四、ssh

sudo -H -u git gitosis-init < /tmp/id_dsa.pub

公钥为管理公钥用有者iphone

五、post

sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
ssh git@gitserver
PTY allocation request failed on channel 0
fatal: unrecognized command 'gitosis-serve schacon@quaternion'
  Connection to gitserver closed.

说明 Gitosis 认出了该用户的身份,但因为没有运行任何 Git 命令,因此它切断了链接。那么,如今运行一个实际的 Git 命令 — 克隆 Gitosis 的控制仓库:.net

六、调试

# 在你本地计算机上
$ git clone git@gitserver:gitosis-admin.git

这会获得一个名为 gitosis-admin 的工做目录,主要由两部分组成:日志

$ cd gitosis-admin
$ find .
./gitosis.conf
./keydir
./keydir/scott.pub

gitosis.conf 文件是用来设置用户、仓库和权限的控制文件。keydir 目录则是保存全部具备访问权限用户公钥的地方— 每人一个。在 keydir 里的文件名(好比上面的 scott.pub)应该跟你的不同 — Gitosis 会自动从使用 gitosis-init 脚本导入的公钥尾部的描述中获取该名字。

看一下 gitosis.conf 文件的内容,它应该只包含与刚刚克隆的 gitosis-admin 相关的信息:

$ cat gitosis.conf
[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = scott

它显示用户 scott — 初始化 Gitosis 公钥的拥有者 — 是惟一能管理 gitosis-admin 项目的人。

如今咱们来添加一个新项目。为此咱们要创建一个名为 mobile 的新段落,在其中罗列手机开发团队的开发者,以及他们拥有写权限的项目。因为 ‘scott’ 是系统中的惟一用户,咱们把他设为惟一用户,并容许他读写名为 iphone_project 的新项目:

[group mobile]
writable = iphone_project
members = scott

修改完以后,提交 gitosis-admin 里的改动,并推送到服务器使其生效:

$ git commit -am 'add iphone_project and mobile group'
[master]: created 8962da8: "changed name"
 1 files changed, 4 insertions(+), 0 deletions(-)
$ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 272 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitserver:/opt/git/gitosis-admin.git
   fb27aec..8962da8  master -> master

在新工程 iphone_project 里首次推送数据到服务器前,得先设定该服务器地址为远程仓库。但你不用事先到服务器上手工建立该项目的裸仓库— Gitosis 会在第一次遇到推送时自动建立:

$ git remote add origin git@gitserver:iphone_project.git
$ git push origin master
Initialized empty Git repository in /opt/git/iphone_project.git/
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gitserver:iphone_project.git
 * [new branch]      master -> master

请注意,这里不用指明完整路径(实际上,若是加上反而没用),只须要一个冒号加项目名字便可 — Gitosis 会自动帮你映射到实际位置。

要和朋友们在一个项目上协同工做,就得从新添加他们的公钥。不过此次不用在服务器上一个一个手工添加到 ~/.ssh/authorized_keys 文件末端,而只需管理 keydir 目录中的公钥文件。文件的命名将决定在 gitosis.conf 中对用户的标识。如今咱们为 John,Josie 和 Jessica 添加公钥:

$ cp /tmp/id_rsa.john.pub keydir/john.pub
$ cp /tmp/id_rsa.josie.pub keydir/josie.pub
$ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub

而后把他们都加进 ‘mobile’ 团队,让他们对 iphone_project 具备读写权限:

[group mobile]
writable = iphone_project
members = scott john josie jessica

若是你提交并推送这个修改,四个用户将同时具备该项目的读写权限。

Gitosis 也具备简单的访问控制功能。若是想让 John 只有读权限,能够这样作:

[group mobile]
writable = iphone_project
members = scott josie jessica

[group mobile_ro]
readonly = iphone_project
members = john

如今 John 能够克隆和获取更新,但 Gitosis 不会容许他向项目推送任何内容。像这样的组能够随意建立,多少不限,每一个均可以包含若干不一样的用户和项目。甚至还能够指定某个组为成员之一(在组名前加上 @ 前缀),自动继承该组的成员:

[group mobile_committers]
members = scott josie jessica

[group mobile]
writable  = iphone_project
members   = @mobile_committers

[group mobile_2]
writable  = another_iphone_project
members   = @mobile_committers john

若是遇到意外问题,试试看把 loglevel=DEBUG 加到 [gitosis] 的段落(译注:把日志设置为调试级别,记录更详细的运行信息。)。若是一不当心搞错了配置,失去了推送权限,也能够手工修改服务器上的 /home/git/.gitosis.conf 文件 — Gitosis 实际是从该文件读取信息的。它在获得推送数据时,会把新的 gitosis.conf 存到该路径上。因此若是你手工编辑该文件的话,它会一直保持到下次向 gitosis-admin 推送新版本的配置内容为止。

相关文章
相关标签/搜索