安装git依赖软件
sudo apt-get install git-core python-setuptools openssh-server openssh-client
配置服务器git用户信息
git config --global user.name "fangqi179"
git config --global user.email "[email protected]"
安装gitosis
cd ~
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
sudo python setup.py install
创建服务器管理员git
sudo useradd -m git
sudo passwd git
为git用户创建仓库目录
sudo mkdir /home/gitrepository
sudo chown git:git /home/gitrepository
创建链接映射
由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。
su - git
ln -s /home/gitrepository /home/git/repositories
用ssh公钥对gitosis初始化
gitosis-init < ~/id_rsa.pub
此处的id_rsa.pub为管理员客户端的ssh公钥。
对post-update文件添加执行权限
sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update
gitosis管理员客户端配置权限
sudo mkdir ~/gitadmin
cd gitadmin
git clone [email protected]:gitosis-admin.git
clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用于认证请求的客户端机器。现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名命名好,复制到keydir目录下。
编辑gitosis.conf文件
[gitosis]
[group gitosis-admin] ####管理员组
members = charn@ubuntu ####管理员用户名,需要在keydir目录下找到相应的.pub文件,多个可用空格隔开(
下同)
writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)
[group testwrite] ####可写权限组
members = zhangsan####组用户
writable = mytestproject####可写的项目仓库名
[group testread]####只读权限组
members =lisi####组用户
readonly= mytestproject####只读项目仓库名
因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。
git add .
git commit -am "add a user permission"
git push origin master
新增的用户不能立即生效,这时候需要重新启动一下sshd服务
sudo /etc/init.d/ssh restart