一、所需软件软件安装与配置
git-core是git版本控制核心软件,安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件
$ sudo apt-get install git-core openssh-server openssh-client
配置git账号名和邮箱
$ git config--global user.name "myname"
$ git config--global user.email "myemail@gmail.com"
安装python的setuptools和gitosis,由于gitosis的安装需要依赖于python的一些工具,所以我们需要先安装python的setuptools。
$ sudo apt-get install python-setuptools
$ git clone https://github.com/res0nat0r/gitosis.git #中间两个为零
$ cd gitosis/
$ sudo python setup.py install
二、创建git管理员账号
创建git用户
$ sudo useradd -m git
$ sudo passwd git
三、配置gitosis
在管理员机器生成秘钥,管理员机器可以是此台服务器别的用户,也可以是别的机器
$ ssh-keygen -t rsa # 这里会提示输入密码,我们不输入直接回车即可
把生成的id_rsa.pub拷到git账户下,比如 /home/git/,用这个key来初始化git仓库
$ su git # 输入密码,切到git用户
~git$ sudo chmod a+r /home/git/id_rsa.pub
~git$ sudo -H -u git gitosis-init < /home/git/id_rsa.pub
出现如上信息说明gitosis已经初始化成功, 会在/home/git/目录下生成repositories目录,这个就是放在git项目的目录,里面有gitosis-adgitosis.git的仓库,通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。
添加权限
~git$ sudo chown git:git /home/git/repositories
~git$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
~git$ ubuntu:/tmp/gitosis$ sudo chmod 755 /home/git/repositories
四、在服务器新建测试仓库
创建test仓库
~git$ cd /home/git/repositories/
~git$ git init --bare test.git # 此时为空,不能clone,必须先让管理员或有权限的人放一个初始化的版本到仓库中
五、使用gitosis管理用户操作项目的权限
在管理员电脑上做如下操作
$ mkdir gitadmin
$ cd gitadmin/
$ gitadmin$ git clone git@10.239.51.66:gitosis-admin.git
# 若报错,可以尝试全路径,
$ git clone git@192.168.1.106:/home/git/repositories/gitosis-admin.git
clone后,gitosis-admin目录下:
keydir目录: 存放所有需要访问git服务器的用户的ssh公钥,各个用户按照前面提到的办法生成各自的ssh公钥文件后,把所有人的ssh公钥文件按名字重新命名一下,然后拷贝到keydir目录下,例如,lisi.pub, zhangsan.pub , 若lisi为管理员机器的ssh key
gitosis.conf文件,做相应的配置:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin #仓库名称
members = lisi # 有权限的成员,只有lisi可以读写此项目
[group testgit]
writable = test # 仓库名称
members =lisi zhangsan # 组成员,lisi, zhangsan都可以读写此项目
这个配置文件表达了如下含有:gitosis-admin组成员有ljz,该组对gitosis-admin仓库有读写权限;testgit组有 ljz lisi wanger三个成员,该组对test仓库有读写权限。目前这些配置文件的修改只是在本地,必须推送到远程的git服务器上才能真正生效
提交并push到Git服务器
$ git add .
$ git commit –am "add test and someusers"
$ git push origin master
六 初始化测试项目
现在服务器搭建完毕,并且有一个空的项目test在服务器上。接下来,需要测试一下,空仓库是不能clone的,所以需要某个有写权限的人初始化一个版本。在客户端执行
$ mkdir mytest
$ cd mytest
$ git init (在客户端执行,初始化一个本地的版本库)
$ echo "hello world!!!" > hello.txt
$ git add .
$ git commit –m "init commit"
$ git remote add origin git@10.239.52.66:test.git
$ git push origin master