##简介 git 版本管理有很多。有gitolite、gitblit、gitlab。gitlab太大而且我们不需要这么多功能。而且不需要web。 发现Gitblit可以很方便的搭建服务,是用Java编写的,带有web管理界面。 gitolite。使用perl写的相当于简介控制了ssh登录操作。登录必须使用证书登录。根据证书识别用户身份 这里我们采用gitolite ##安装 ``` yum install perl openssh git yum install 'perl(Data::Dumper)' ``` ``` 创建git用户 adduser git passwd git ``` ```shell 切换到git用户 su - git #获取gitolite git clone git://github.com/sitaramc/gitolite # 创建bin目录,用于存放安装后的文件 mkdir -p ~/bin # 将gitolite安装到bin目录 gitolite/install -to ~/bin # 使用YourName.pub公钥初始化版本库 gitolite setup -pk YourName.pub ``` 在客户端克隆Gitlite管理库 git clone git@ip:gitolite-admin.git 你可以看到在管理库里,有两个目录, conf/和keydir/,其中conf/下面有个名为gitolite.conf的配置文件。 > - conf/gitolite.conf 用于Git项目配置,访问权限设置。 > - keydir/ 用于存储用户的SSH public key(公钥)。 ### 增加新用户 增加新用户,就是允许新用户能够通过其公钥访问 Git 服务。只要将新用户的公钥添加到 gitolite-admin 版本库的 keydir 目录下,即完成新用户的添加。管理员从用户获取公钥,并将公钥按照 username.pub 格式进行重命名,然后进入 gitolite-admin 本地克隆版本库中,复制新用户公钥到 keydir 目录,更新到远程版本库即可。 ``` git add. git commit -m "add user XXX" git push origin master ``` ### 增加版本库 在`conf/gitolite.conf`文件中添加两行,然后更新到远程版本库即可。 ``` repo gitolite-admin RW+ = jiangxin ``` ### 权限配置 下面我们看一个不那么简单的授权文件: ``` 1 @admin = admin wangsheng 2 3 repo gitolite-admin 4 RW+ = admin 5 6 repo ossxp/.+ 7 C = @admin 8 RW = @all 9 10 repo testing 11 RW+ = @admin 12 RW master = junio 13 RW+ pu = junio 14 RW cogito$ = pasky 15 RW bw/ = linus 16 - = somebody 17 RW tmp/ = @all 18 RW refs/tags/v[0-9] = junio ``` 在上面的示例中,我们演示了很多授权指令。 - 第1行,定义了用户组 @admin,包含两个用户 admin和 wangsheng。 - 第3-4行,定义了版本库 gitolite-admin。并指定只有用户 admin 才能够访问,并拥有读(R)写(W)和强制更新(+)的权限。 - 第6行,通过正则表达式定义了一组版本库,即在 ossxp/ 目录下的所有版本库。 - 第7行,用户组 @admin 中的用户,可以在 ossxp/ 目录下创建版本库。创建版本库的用户,具有对版本库操作的所有权限。 - 第8行,所有用户都可以读写 ossxp 目录下的版本库,但不能强制更新。 - 第9行开始,定义的 testing 版本库授权使用了引用授权语法。 - 第11行,用户组 @admin 对所有的分支和里程碑拥有读写、重置、添加和删除的授权。 - 第12行,用户 junio 可以读写 master 分支。(还包括名字以 master 开头的其他分支,如果有的话)。 - 第13行,用户 junio 可以读写、强制更新、创建以及删除 pu 开头的分支。 - 第14行,用户 pasky 可以读写 cogito 分支。 (仅此分支,精确匹配)。 详细的权限设置请查阅[官方文档](https://github.com/sitaramc/gitolite)。 post-receive ``` #!/bin/bash unset GIT_DIR /usr/bin/git --work-tree=/tmp/pyweb --git-dir=/home/git/repositories/pyweb.git checkout -f ```