一、安装
二、初始化git用户信息
git config --global user.name "jeson"
git config --global nser.email "jeson@imoocc.com"
三、安装gitosis
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
python ./setup.py install
四、创建git管理员账户、配置git
1、创建管理员账户
useradd -m gitmanager
passwd gitmanager
2、建立代码目录
mkdir /opt/gitcode
chown -R gitmanager:gitmanager /opt/gitcode
chmod -R 700 /opt/gitcode/
3、创建链接映射,因为gitosis默认会将代码放到/home/gitmanager/repository下
ln -s /opt/gitcode /home/gitmanager/repository
4、初始化
本地生成id_rsa.pub,id_rsa,并且将id_rsa.pub上传到git服务器上,在服务器上执行,如下:
su - gitmanager
gitosis-init < /tmp/id_rsa.pub
5、本地克隆出管理的admin仓库
模拟登录 正常如下:
ssh gitmanager@myhost
PTY allocation request failed on channel 0
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
Connection to 192.168.1.101 closed.
git clone gitmanager@myhost:gitosis-admin.git
Cloning into 'gitosis-admin'...
remote: 对象计数中: 5, 完成.
remote: 压缩对象中: 100% (5/5), 完成.
Receiving objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Checking connectivity... done.
四、配置管理
1、管理的文件说明
git到本地后,可以修改配置文件进行权限划分和管理
- gitosis.conf
用来设置用户、仓库和权限的控制文件
- keydir
保存所有具有访问权限用户公钥的地方每人一个
2、建立新项目
1) vim gitosis.conf
[group optools]
members = renren@Jeson.local
writable = optools
2)修改完之后,提交 gitosis-admin 里的改动,并推送到服务器使其生效
Jeson:gitosis-admin renren$ git commit -am 'add nginx_conf group'
[master ec0d342] add nginx_conf group
1 file changed, 3 insertions(+)
Jeson:gitosis-admin renren$ git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 374 bytes | 374.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To mygithost:gitosis-admin.git
fb7474d..ec0d342 master -> master
五、创建新的工程(没有代码)
mkdir optools //和配置文件gitosis.conf对应的项目保持一直,可以在客户端的任意一个目录下新建
cd optools/
git init
touch main.py hello.py
git add .
echo “/* add something */” > hello.py
git commit -a -m "origin"
git remote add gitmanager@192.168.1.101:optools.git //添加远程git路径 ,注意:名字+.git 如: git remote add origin mygithost:pops.git
git push origin master
六、添加新用户
假设添加用lisi2@imoocc
1、新用户key生成
id_rsa id_rsa.pub
2、添加到配置文件
[group pops]
members = jeson1@imoocc lisi2@imoocc
writable = pops
3、管理源将新pub的密钥添加keydir中
将id_rsa.pub文件重命名为lisi2@imoocc.pub
4、更新配置
git commit -am 'add new group'
git push
问题:
1、 ERROR:gitosis.serve.main:Repository read access denied
fatal: Could not read from remote repository.
这个问题在网上查的都说了文件名要跟权限名对应,而我尝试了各种对应情况,甚至已经到了更改服务器的hostname了,结果依旧报错。幸而后面查资料的时候得到了灵感。打击一定要多加区分两种情况:
私钥未加入gitosis
|
git clone git@xxx.xxx.xxx.xxx:repositories/gitosis-admin.git |
私钥加入到gitosis后应使用, 否则会报错 |
git clone git@xxx.xxx.xxx.xxx:gitosis-admin.git |
在加入私钥前,使用的是服务器的相对路径或绝对路径,我这里用了相对路径repositories/gitosis-admin.git,而当你把私钥加入后,gitosis自动判定你的权限在它的管理之下,gitosis项目基目录为repositories/,在repositories/的基础下再查找repositories/gitosis-admin.git肯定是找不到的,而且也没有这个权限去找。所以你的git项目地址就要做相应的修改:gitosis-admin.git
2、删除用户的方式
userdel -r gitmanager