之前介绍过如何在 Windows 上搭建 Git 仓库服务器 https://www.flyzy2005.com/tech/git/git-server-on-windows/ , 不过服务器用的比较多的还是 Linux, 因为便宜(同一个 VPS https://www.flyzy2005.com/vps/ 商一般来说 Linux 比 Windows 便宜), 没有图形界面, 低配置 VPS 的也可以跑动 Linux, 开源免费, 我感觉比较灵活, 下载源也方便, 手机都可以 ssh 远程. 今天就介绍一下如何用 Linux 搭建 Git 服务器以及使用 Gitosis 来管理用户以及用户权限.
系统环境
DigitalOcean https://www.flyzy2005.com/tag/digitalocean/ Ubuntu 16.04, 全程 root 权限.
如果你是学生, 想弄一个远程的 git 服务器管理一下自己的代码, 也可以选择 DO, 现在 GitHub 有学生领取 50 美元的优惠码的活动 https://www.flyzy2005.com/vps/digitalocean-github-student-promo/ .
在 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 https://www.flyzy2005.com/tech/linux/xshell-files-windows-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 域名购买与优惠码 https://www.flyzy2005.com/build-page/namesilo-domain-dnspod-dns/ , 买完域名后, 直接添加一个 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 常用命令 https://www.flyzy2005.com/tech/git/git-github-guide/ 进行协同开发即可~
来源: http://www.bubuko.com/infodetail-2616261.html