单纯使用 SSH 架设可见此篇: Linux 架设使用 SSH 共享存取的 Git Server
想要控管 User / Project 权限, 而且还想要控管 branch / tag 等读写权限, 则需要靠 Gitolite 等套件来协助.
gitolite – SSH-based gatekeeper for git repositories
此篇主要写的是 Gitolite 架设, 若之前已经有依照上述文章架设共享存取的 Git Server, 而 Gitolite 也想用 git 的帐号来管理, 则需做下述动作先改回原始设定.
注: 此文会用 gitolite 的帐号来管理, 不会用 git 帐号, 所以不需要做下述更改的动作
vim /etc/passwd
git:x:1000:1000::/home/git:/usr/bin/git-shell
改回
git:x:1000:1000::/home/git:/bin/sh
mv /home/git/.ssh/authorized_keys /home/git/.ssh/authorized_keys.bak
相关资料准备
系统套件安装
apt-get install gitolite git-core
安装完成会出现此讯息: No adminkey given – not initializing gitolite in /var/lib/gitolite.
相关设定参考可见 /etc/gitolite/example.conf, /etc/gitolite/example.gitolite.rc
产生 SSH 公钥
ssh-keygen -t rsa # 产生 id_rsa, id_rsa.pub
mv id_rsa ~/.ssh/ # 将 id_rsa 放在 ~/.ssh/ 内.
scp id_rsa.pub example.com:/tmp/user1.pub # 将 id_rsa.pub 丢到 Server 上, 大家的 public key 都需要传到 Server 上.
scp id_rsa.pub example.com:/tmp/admin.pub # 管理者的 key 同 user key, 在此设为 admin.pub, 避免下述内容造成混淆.
Gitosis Server 架设
ssh example.com # Git Server
sudo su – gitolite
gl-setup /tmp/admin.pub # 汇入管理者的 Public key. 注意: 此
档名即是帐号名称, 不要使用 id_rsa.pub 当档名, 建议
用 "帐号.pub" 当档名
exit
Gitolite Server 设定专案、新增帐号
Gitolite 的专案权限 / 帐号管理 是使用 Git 来管理, 专案名称: gitolite-admin.git
git clone gitolite@example.com:gitolite-admin # 因为 Gitolite 是用 gitolite-admin.git 来管理, 所以需要抓下来修改、设定(未来所有管理也是如此)
cd gitolite-admin # 会看到下述
conf/gitolite.conf # 设定档, 设定谁可以读写哪个专案的 Repository
keydir # 目录, 放每个帐号的 public key. 放置的档案命名: user1.pub, user2.pub (user1, user2.. 为帐号名称(
档名 = 帐号), 建议
使用 "帐号.pub" 当档名)
设定专案权限
cd gitolite-admin
vim conf/gitolite.conf # 会看到下述, 不要动他, 于最下方设定自己的 Group / 专案名称即可.
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
由此档案 新增 / 修改后, commit + push 即可.
建立专案
git clone gitolite@example.com:testing # 对应 gitolite.conf 的 repo testing, 会出现下述讯息
Cloning into testing…
warning: You appear to have cloned an empty repository.
cd testing
touch readme
git add .
git commit -m ‘add readme’
git push origin master
新增帐号
cd gitolite-admin
cp /tmp/user1.pub keydir/user1.pub # 请依照实际帐号命名, 不要取 user1, user2
cp /tmp/user1.pub keydir/user1@machine.pub # 若相同帐号, 则使用 user@machine.pub
cp /tmp/user2.pub keydir/user2.pub
git add keydir/user1.pub keydir/user1@machine.pub keydir/user2.pub
git commit -m ‘add user1, user1@machine, user2 public key’
git push
gitolite.conf 更多设定条件
下述摘录自: Gitolite 构建 Git 服务器 – 授权使用者建立属于自己的空间 (User 下面可以建 N 个 Repository), 在此就不记载, 请自行详见: 此文的 章节 2.4.3
# 取自 2.3.1 授权文件基本语法
@admin = jiangxin wangsheng
repo gitolite-admin
RW+ = jiangxin
repo ossxp/.+
C = @admin
RW = @all
repo testing
RW+ = @admin
RW master = junio
RW+ pu = junio
RW cogito$ = pasky
RW bw/ = linus
- = somebody
RW tmp/ = @all
RW refs/tags/v[0-9] = junio