设为首页 收藏本站
查看: 694|回复: 0

[经验分享] 基于gitolite的git服务架设

[复制链接]

尚未签到

发表于 2018-9-18 08:45:04 | 显示全部楼层 |阅读模式
如果不是要与他人协同开发,git根本不需要架设服务器,git可以直接使用本地版本库的路径完成git版本间的操作。但是如果需要和他人分享版本库,协作开发,就需要能够通过网络协议操作git库。git支持的协议很丰富,架设服务器的选择也很多,不同的方案有着各自的公优缺点。本文就以gitolite为例构建一个高效的多人协作的git服务器。环境:    git客户端test.cmmobi.com(172.16.5.202),git服务器为git.cmmobi.com(172.16.5.200)。配置好/etc/hosts文件,以让其可互相解析    cat /etc/hosts        172.16.5.202 test.cmmobi.com        172.16.5.200 git.cmmobi.com  客户端配置(test.cmmobi.com上的配置)
创建用户,并生成密钥对,在此为方便测试,就不再另外创建用户,直接使用root用户即可。        cd /root        mkdir .ssh        ssh-keygen -f ~/.ssh/admin    将生成的公钥上传到git服务器的/tmp目录以备用        scp ~/.ssh/admin.pub root@git.cmmobi.com:/tmp    创建访问git服务时的配置文件        cat ~/.ssh/config            host gitolite #git服务器别名                user git #服务端管理gitolite的用户                hostname git.cmmobi.com #git服务器的主机名                port 22 #访问git服务器时的端口号                identityfile ~/.ssh/admin #访问git服务器时使用的公钥文件  chmod 600 ~/.ssh/config
服务端配置(git.cmmobi.com上的配置)    服务要求:        1.任意的unix系统        2.shell环境        3.git版本为1.6.6及以上        4.perl版本为5.8.8及以上        5.openssh版本为5.0及以上    安装:        1.使用root用户登陆服务器,并创建git用户,用以管理git服务            useradd git            echo "git" | passwd git --stdin        2.切换到git用户,并确保~/.ssh/authorized_keys文件为空或者不存在        3.执行安装操作:            git clone git://github.com/sitaramc/gitolite #下载gitolite软件            mkdir -p $HOME/bin            gitolite/install -to $HOME/bin #安装gitolite            export PATH=$PATH:$HOME/bin            echo "PATH=$PATH:$HOME/bin" >> .bashrc            gitolite setup -pk /tmp/admin.pub #将客户端的root用户配置为git的管理员如果在执行gitolite/install -to $HOME/bin时报如下错误:            Can't locate Time/HiRes.pm in @INC (@INC contains: /home/git/gitolite/src/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /home/git/gitolite/src/lib/Gitolite/Common.pm line 74.            BEGIN failed--compilation aborted at /home/git/gitolite/src/lib/Gitolite/Common.pm line 74.            Compilation failed in require at ./install line 15.            BEGIN failed--compilation aborted at ./install line 15.        需要安装perl-Time_HiRes:            yum install -y perl-Time-HiRes  安装完成后,我们可以在$HOME下看到一个repositories目录,里面有两个仓库,分别为gitolite-admin和testing,其中gitolite-admin为管理仓库。
在客户端通过root用户克隆gitolite-admin库    git clone gitolite:gitolite-admin进入gitolite-admin仓库,会看到两个目录,分别为keydir和conf,其中keydir目录用来管理用户,在其中可以看到默认有一个文件叫做admin.pub,正是我们之前生成的管理用户的公钥文件。下面我们再添加一个用户breezey:    useradd breezey    echo "breezey" | passwd breezey --stdin    su - breezey    mkdir .ssh    ssh-keygen -f .ssh/breezey    vim .ssh/config        host gitolite            user git            hostname git.cmmobi.com            port 22            identityfile ~/.ssh/breezey    su - root #切换回管理用户    cp /home/breezey/.ssh/breezey.pub /root/gitolite-amdin/keydir    cd /root/gitolite-admin    git add keydir    git status    git config --global user.email "breezey@cmmobi.com"    git config --global user.name "breezey"    git commit -a "add user:breezey"    git push    su - breezey #再切换到breezey用户    git clone gitolite:testing #克隆testing仓库,这时已经可以成功克隆。我们可以进入到testing库中,创建一个测试文件并提交:    cd testing    echo "Hello World" > welcome.txt    git add *    git commit -m "a new file:welcome.txt"    git push当我们第一次提交并执行git push时,会出现如下错误:    No refs in common and none specified; doing nothing.    Perhaps you should specify a branch such as 'master'.    fatal: The remote end hung up unexpectedly    error: failed to push some refs to 'gitolite:test1'出现这个问题的原因,是因为git找不到你要提交的版本,可以使用如下命令:    git push origin master  Gitolite授权详解
前文我们提到,在gitolite-admin的管理仓库中有两个目录,其中keydir目录为管理用户的目录,而另外一个conf目录里,有一个叫作gitolite.conf的配置文件,此文件即是管理仓库及用户授权的文件。我们先来看一个该配置文件的示例:1 @admin = breezey chenliang2 repo gitolite-admin3 RW+ = breezey4 repo ossxp/.+5 C = @admin6 RW = @all7 repo testing8 RW+ = @admin9 RW master = junio10 RW+ pu = junio11 RW cogito$ = pasky12 RW bw/ = linus13 - = somebody14 RW tmp/ = @all15 RW refs/tags/v[0-9] = junio我们先对该示例文件作一个简单的说明,以方便大家对授权文件有一个基本的了解:第1行定义了一个admin的组,该组里包含两个用户,分别是breezey chenliang第2-3行定义了一个版本库gitolite-admin,并且指定breezey用户对gitolite-admin仓库拥有读(R),写(W)和强制更新(+)的权限第4行通过正则表达式定义了一组版本库,即ossxp目录下的所有版本库第5行定义admin组的用户可以在ossxp目录下创建版本库第6行定义所有用户对ossxp目录下的版本库拥有读写的权限,但不能强制更新第7行定义了一个版本库testing第8行定义了admin组用户对testing库的所有分支和tag拥有读、写、重置、添加、删除的权限第9行定义junio用户对master分支有读写的权限,还包括以master开头的所有分支。第10行定义junio用户对pu分支拥有读写,重置,添加,删除的权限,还包括以pu开头的所有分支第11行定义pasky用户对cogito分支拥有读写的权限,仅此分支,精确匹配第12行定义linus用户对bw/拥有读写的权限第13行定义somebody用户对testing仓库有写的权限第14行定义所有用户对tmp/拥有读写的权限  第15行定义junio可以读写任意tag,包括以v加上数字开头的tag
组的定义:@admin = breezey chenliang@user = @admin @staff user1版本库的定义:repo ossxp/.+ #匹配ossxp目录下的所有版本库repo myrepo.$ #匹配以myrepo.结尾的版本库repo sandbox/test1 #创建sandbox下的test1库授权关键字:C:C代表创建。仅在符版本库授权时可以使用。用于指定谁可以创建与通配符匹配的版本库。R,RW,RW+:R为只读,RW为读写,RW+为读写及强制pushRWD,RW+D:只有当授权指令中定义了正则引用(正则表达式定义的branch、tag等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(branch or tag)RWCD,RW+CD:只有当授权指令中定义了正则引用(正则表达式定义的branch、tag等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(branch or tag),D的含义是允许删除和正则引用匹配的引用(branch or tag )-:减号(-)是一条禁用指令,只对写操作起作用,不会对用户的读操作施加影响。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-589522-1-1.html 上篇帖子: git小技巧 下篇帖子: git的一些操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表