作者:小虾米 发表时间:2017-10-11 18:25:37 类别:Linux
Git服务器: 192.168.0.235
管理员机: 192.168.0.234
普通用户机: 192.168.0.236
git服务器搭建请参考另一篇文章《Git服务器搭建及Hooks自动部署》
从 Gitosis 项目主页克隆并安装:
[root]$ git clone https://github.com/tv42/gitosis.git
[root]$ cd gitosis
[root]$ sudo python setup.py install
/home/git
作为存储所有Git仓库的根目录,不过我之前已经把项目仓库都放在/data/git
里面了,所以为方便起见,我们可以做一个符号连接,直接划转过去,而不必重新配置:
[root]$ ln -s /data/git /home/git/repositories
使用gitosis-init
命令初始化Gitosis,user_name.pub
为权限管理员的公钥文件。
[git]$ sudo -H -u git gitosis-init < /tmp/user_name.pub
post-update
脚本加上可执行权限:
[git]$ sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
//在管理员机上操作:
[~]$ ssh git@192.168.0.235
PTY allocation request failed on channel 0
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
Connection to 192.168.0.235 closed.
克隆Gitosis控制仓库
$ git clone git@gitserver:gitosis-admin.git ./gitosis
gitosis.conf
文件是用来设置用户、仓库和权限的控制文件。keydir
目录则是保存所有具有访问权限用户公钥的地方—每人一个。在keydir里的文件名(比如scott.pub)应该跟你的不一样。Gitosis会自动从使用gitosis-init
脚本导入的公钥尾部的描述中获取该名字。
$ cat gitosis.conf
[gitosis]
[group gitosis-admin]
members = xxx #管理员用户,唯一可以管理gitosis-admin项目的人。
writable = gitosis-admin #有写权限的项目
[group mobile]
members = scott #可以操作新项目的用户列表,多个用户以空格分隔
writable = mars #可以操作的项目,没有则会自动创建
先在本地初始化好项目目录,然后添加远程分支
$ git remote add origin git@192.168.0.234:mars.git
$ git push origin master
上面操作仅供参考,有任意提交操作即可在服务器自动生成一个库。不用再到服务器上手动新建库。
这里不用指明完整路径(实际上,如果加上反而没用),只需要一个冒号加项目名字即可,Gitosis会自动帮你映射到实际位置。
只需管理keydir目录中的公钥文件。文件的命名将决定在gitosis.conf中对用户的标识
192.168.0.236用户机:
1、生成key文件
2、复制生成的id_rsa.pub文件并重命名,如:client236.pub
3、传送至192.168.0.234管理员机
192.168.0.234管理员机:
把client236.pub文件放在gitosis-admin项目的keydir目录 修改配置文件 /path/to/gitosis/gitosis.conf
[group mobile]
members = scott john josie client236
writable = mars
[group read_only]
members = new_user
readonly = new_project
[group g_committers]
members = scott josie jessica
[group g_write]
members = @g_committers
writable = project
[group g_another_write]
members = @g_committers john
writable = another_project
如果遇到意外问题,试试看把loglevel=DEBUG
加到[gitosis]
的段落(译注:把日志设置为调试级别,记录更详细的运行信息)。如果一不小心搞错了配置,失去了推送权限,也可以手工修改服务器上的/home/git/.gitosis.conf
文件 — Gitosis实际是从该文件读取信息的。它在得到推送数据时,会把新的gitosis.conf
存到该路径上。所以如果你手工编辑该文件的话,它会一直保持到下次向gitosis-admin
推送新版本的配置内容为止。