简易 git 服务器¶
简易 gitolite 服务器搭建¶
服务器搭建¶
步骤如下
- 创建 git 用户
sudo adduser git
su - git
- 添加 ssh 公钥
mkdir .ssh
cat /tmp/id_rsa.lenny.pub >> ~/.ssh/authorized_keys
- 在任何 git 用户可读写的位置新建 git 裸仓库
mkdir project.git
cd project.git
git --bare init
服务器使用¶
远程直接克隆和推送内容
git clone git@gitserver:/home/git/project.git
cd project
echo "sample git project" README
git commit -am 'fix for the README file'
git push origin master
使用 gitolite 搭建 git 服务器¶
服务器管理¶
下载管理仓库¶
Gitolite 使用 gitolite-admin.git 仓库来管理,所以需要抓下来修改、设置(未来所有管理也是如此)。
git clone gitolite@gitserver:gitolite-admin
cd gitolite-admin
ls
conf/gitolite.conf # 配置项,配置谁可以读写哪个仓库 Repository。
keydir # 目录,存放每个帐号的 public key。 放置的文件命名:user1.pub, user2.pub (user1, user2.. 为帐号名称(文件名 = 帐号名), 建议使用"帐号.pub" 文件名)
新增帐号¶
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 配置¶
# 取自 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
# 取自 2.3.3 ACL
repo testing
RW+ = jiangxin @admin
RW = @dev @test
R = @all
repo 语法
repo 語法:《權限》 『零個或多個正規表示式批配的引用』 = <user> [<user> ...]
每條指令必須指定一個權限,權限可以用下面任何一個權限的關鍵字:C, R, RW, RW+, RWC, RW+C, RWD, RW+D, RWCD, RW+CD
C : 建立
R : 讀取
RW : 讀取 + 寫入
RW+ : 讀取 + 寫入 + 對 rewind 的 commit 做強制 Push
RWC : 授權指令定義 regex (regex 定義的 branch、tag 等), 才可以使用此授權指令。
RW+C : 同上,C 是允許建立 和 regex 配對的引用 (branch、tag 等)
RWD : 授權指令中定義 regex (regex 定義的 branch、tag 等), 才可以使用此授權指令。
RW+D : 同上,D 是允許刪除 和 regex 配對的引用 (branch、tag 等)
RWCD : 授權指令中定義 regex (regex 定義的 branch、tag 等), 才可以使用此授權指令。
RW+CD : C 是允許建立 和 regex 配對的引用 (branch、tag 等), D 是允許刪除 和 regex 配對的引用 (branch、tag 等)
- : 此設定為不能寫入,但是可以讀取
註:若 regex 不是以 refs/ 開頭,會自動於前面加上 refs/heads/
群组
@all 代表所有人的意思
@myteam user1 user2 : user1, user2 都是屬於 myteam 這個群組
注解
gitolite 配置的应通过 gitolite-admin 仓库修改并提交到服务器,如若手动更改了服务器端的配置,如更改仓库的存储位置(仓库位置为 gitolite 用户的家目录)等, 需运行 gitolite setup/gl-setup 修复。
gitweb 配置¶
sudo apt-get install gitweb
sudo vim /etc/gitweb.conf
$projectroot = "/home/git/repositories/";
$projects_list = "/home/git/projects.list";
sudo mv /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf
Options +FollowSymLinks +ExecCGI
sudo a2enconf gitweb
sudo a2enmod cgi
sudo apache2ctl restart
需主意 gitweb 对 git 的 projectroot 和 projects_list 要有权限。 可以设置 gitolite 的掩码:
vim /var/lib/gitolite3/.gitolite.rc #$REPO_UMASK = 0027;
sudo usermod -G gitolite3 www-data
sudo chmod 640 /val/lib/gitolite2/projects.list