之前介绍过如何在Windows上搭建Git仓库服务器,不过服务器用的比较多的还是Linux,因为便宜(同一个VPS商一般来说Linux比Windows便宜),没有图形界面,低配置VPS的也可以跑动Linux,开源免费,我感觉比较灵活,下载源也方便,手机都可以ssh远程。今天就介绍一下如何用Linux搭建Git服务器以及使用Gitosis来管理用户以及用户权限。
系统环境
DigitalOcean Ubuntu 16.04,全程root权限。
如果你是学生,想弄一个远程的git服务器管理一下自己的代码,也可以选择DO,现在GitHub有学生领取50美元的优惠码的活动。
在Ubuntu上搭建Git服务器
安装Git服务器必备的软件
这里主要包括git核心软件、ssh协议软件和python的setuptools
apt-get update && apt-get -y install git-core openssh-server openssh-client python-setuptools lrzsz
安装Gitosis管理用户与项目
Gitosis是一套用来管理authorized_keys文件和实现简单连接限制的脚本,对项目、用户以及项目的读写权限进行管理,安装命令如下:
git clone https://github.com/res0nat0r/gitosis.git && cd gitosis && python setup.py install
Gitosis默认使用的Git根目录是/home/git/repositories,其中git是即将新建的用户。如果你想把仓库放在别的地方,就用软连接将它与/home/git/repositories连接起来。
创建Git管理员账户
新建一个用户作为Git服务器的管理员:
useradd -m git passwd git
用管理员公钥初始化Gitosis
这个管理员公钥的意思是你本机的公钥,是用来管理这个Gitosis的(默认会有gitosis-admin的读写权限),你可以将你本机(常用机器)的ssh key拷贝到服务器上来,从而实现管理的目的。
1.在本机生成公钥
ssh-keygen -t rsa
生成好后,Windows默认的存放路径在C:\Users\用户名\.ssh\id_rsa.pub。
2.上传公钥至服务器并激活Gitosis
将公钥拷贝到git用户下,因此先切换至git用户:
su git
之后用rz命令直接拷贝值服务即可。(Windows利用lrzsz拷贝文件至Linux)
3.初始化Gitosis
依然在git用户下,利用刚才上传的公钥初始化Gitosis:
gitosis-init < /home/git/id_rsa.pub
在Git服务器新建一个项目
完成上一步之后,你Git服务器已经装好了。相关信息总结如下:
- 默认的仓库地址是在/home/git/repositories
- Git管理用户是刚才创建的git
- Gitosis管理用户权限是通过一个git项目实现的,那个项目地址在/home/git/repositories/gitosis-admin.git,默认是你刚才上传公钥的电脑可以clone此仓库
新建一个项目就是在默认的仓库地址下面新建一个空的git项目:
cd /home/git/repositories mkdir test.git cd test.git git init --bare
如此,便新建了一个test的项目。
在本机clone项目
首先,需要用上传公钥的电脑克隆Gitosis用来管理用户权限的项目:
git clone git@206.189.160.168:gitosis-admin.git
其中,git是你刚才新建的Git管理员,后面跟着的是你的ip(如果你想用你的域名代替,Namesilo域名购买与优惠码,买完域名后,直接添加一个DNS解析到这个IP即可)。
gitosis-admin的中包括一个keydir文件夹和一个gitosis.conf文件,前者是用来存放用户的ssh key的,后者是用来管理用户权限的,举个例子,我现在要给张三和李四的电脑读写test的权限:
1.将张三电脑和李四电脑的ssh key拷贝至keydir文件夹下
例如将张三的公钥文件保存为zhangsan.pub放在keydir下(这个文件名字与下面配置文件要一致)、李四的公钥文件保存为lisi.pub放在keydir下。
2.在gitosis.conf中添加相关配置
[group test] members = zhangsan lisi writable = test
如此,我便新建了一个test的group,其中用户有zhangsan和lisi,他们拥有读写权限。
此时,如果你想让王五只有读的权限,那么就将配置文件改成:
[group test] members = zhangsan lisi writable = test [group test_read] members = wangwu readonly = test
如此,wangwu只能clone或者pull,却不能push。
3.将修改推送至服务器
此时只是完成了本地的修改,要将修改推送到服务器才能生效(add、commit、push),之后test那个仓库的权限就会像刚才在配置文件设置的那样。
总结
至此,你就完成了在Ubuntu上搭建Git服务器的全部任务,接下来就是根据Git常用命令进行协同开发即可~
相关文章