一,远程服务器端的配置(server)
1 安装git与openssh
sudo apt-get install git-core openssh-server openssh-client
2 添加git用户,并将该用户作为所有代码仓库和用户的权限管理者:
sudo useradd -m git
sudo passwd admin2012
3 建立一个git仓库的存储点,它的拥有者为git,权限为700
sudo mkdir /home/repo
sudo chown git:git /home/repo
sudo chmod 700 /home/repo
4 安装配置gitosis
(1)初始化服务器的git用户
git config --global user.name "myname" (myname 替换成你的用户名)
git config --global user.email "myname@server" (myname@server 替换成你的邮箱)
(2) 安装gitosis
1)安装python的setup tool
sudo apt-get install python-setuptools
2) 获得gitosis 软件包(https://github.com/res0nat0r/gitosis.git)
git clone git:https://github.com/res0nat0r/gitosis.git
cd gitosis
sudo python setup.py install
3) 默认状态下gitosis会将git 仓库放在git用户的home下,所以做一个链接到/home/repo
su git
ln -s /home/repo /home/git/repositories
二 客户端机器上的配置(client)
1 使用ssh-keygen 生成key
ssh-keygen -t rsa
2 把客户端的key远程复制到服务器上
cat ~/.ssh/id_rsa.pub | ssh -i ~/.ssh/your_pemfile.pem ubuntu@your_ip_addr "cat>> /tmp"
三 在服务上再次配置gitosis(server)
1 初始化gitosis
sudo chmod a+r /tmp/id_dsa.pub
sudo -H -u git gitosis-init < /tmp/id_dsa.pub
sudo -s
cd /home/git/repositories
cd gitosis-admin.git/
sudo chmod 755 /data/repo/gitosis-admin.git/hooks/post-update
exit
四 创建测试项目 teamwork.git (server)
su git
cd /data/repo
mkdir teamwor.git
git init --bare
exit
五 在客户端修改更新服务器上的gitosis的配置 (client)
(1) git 权限管理本身是通过一个git仓库来管理的,把gitosis-admin.git克隆下来
git clone git@<server>:gitosis-admin.git
cd gitosis-admin
(2) 把别的用户的用公钥添加进来 ,临时把pub文件放在~/temp下
cp ~/temp/id_rsa.pub ./keydir/<user2@pc2>.pub
(3) 修改权限配置
vim gitosis.conf
----------------------------------------
[gitosis]
[groupgitosis-admin]
writable = gitosis-admin
members = ubuntu@serveruser1@pc1 用户一
[group hello] //分组
writable = teamwork //操作仓库的权限
members =user1@pc1 user2@pc2 用户
(4)更新提交到服务器
在gitosis-admin目录下
git add .
git commit -a -m "add new user"
git push origin master
mkdir teamwork-ori
cd teamwork-ori
git init
vim REAME
git add .
git commit -a -m "initial version"
git remote add origin master
注意:如果gitosis中的用户名和keydir里面的key名字没有完全对应上的话,可能会出现如下错误。
ERROR:gitosis.serve.main:Repositoryread access denied
fatal: The remote end hung up unexpectedly