ubuntu上用gitosis来管理 git服务

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的分布式版本控制软件(Distributed SCM)。Git 汲取了 Torvalds 在维护大型的分布式项目开发方面的经验和对文件系统性能的丰富知识,正如其文档所描述的,“是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。”目前,Linux 内核、X.org 服务器和 Ruby on Rails 等开源项目的版本控制系统都已经切换到 Git。

Gitosis 是 Tommi Virtanen 为了更方便和安全的辅助 Git 架设和管理软件版本库 (Software Repository) 而开发的工具软件。虽然 Git 本身也提供 git-daemon 以架设版本库,但在用户访问控制上做的并不严格。而 Gitosis 允许单个用户帐号管理多个版本库,使用 SSH keys 管理用户认证,不需要 shell 帐号就可以解决多用户访问集中版本库的问题。

1 安装git和gitosis

bear@njava:$sudo apt-get install git-core
bear@njava:$sudo apt-get install python python-setuptools
bear@njava:$sudo git clone git://eagain.net/gitosis
bear@njava:$cd gitosis
bear@njava:$sudo python setup.py install

2 建立git用户

bear@njava:$sudo adduser  --system  --shell /bin/sh --gecos 'git user' --group  --disabled-password --home /home/git   git

3 初始化gitosis

初始化gitosis管理缘账户,公钥xxx.pub中xxx就是用户名

bear@njava:$ssh-keygen -t rsa
bear@njava:$sudo -H -u git gitosis-init < bear.pub
bear@njava:$sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

4 设置好ssh帐号的权限,密钥
测试git账户登陆

$ ssh git@njava.com
PTY allocation request failed on channel 0
fatal: unrecognized command 'gitosis-serve bear@desktop'
  Connection to gitserver closed.
 

5 通过git远程设置gitosis

bear@laptop:$git clone git@njava:gitosis-admin.git
bear@laptop:$ls ls -alh gitosis-admin
total 8
drwxr-xr-x   5 bear  staff   170B Jul  8 20:53 .
drwxr-xr-x   8 bear  staff   272B Jul  9 00:35 ..
drwxr-xr-x  16 bear  staff   544B Jul  8 20:54 .git
-rw-r--r--   1 bear  staff   135B Jul  8 20:53 gitosis.conf
drwxr-xr-x   4 bear  staff   136B Jul  8 20:52 keydir
bear@laptop:$ vi gitosis-admin/gitosis.conf
[gitosis]
gitweb = no
daemon = no
loglevel = DEBUG
[group gitosis-admin]
writable = gitosis-admin
members = bear
bear@laptop:$cd gitosis-admin
bear@laptop:$git push

6 新增加用户
将新用户的公钥丢到keydir目录
编辑gitosis.conf文件


[group android]
writable = android_njava
members = bear android

[group ios]
readonly = ios_njava
members = bear

还可以指定某个组为成员之一(在组名前加上 @ 前缀),自动继承该组的成员:


[group android]
writable = android_njava
members = android moto

[group ios]
readonly = ios_njava
members = bear @android

还可以指定某个组为成员之一(在组名前加上 @ 前缀),自动继承该组的成员

link:参考

Tags: , ,

星期五, 五月 14th, 2010 工具

Leave a Reply

1LMooBmUE153Wnd3zDryWvDyXxQudbFxDr