通过gitolite架设git仓库

一. 任务:

    以一台linux电脑(i5,ubuntu 12.04)为服务器,创建仓库seu_ccplayer,创建组media, 组成员包括litong, gavin,i5_admin,对仓库均有读写,创建分支等权限。

二. 实践:

        采用 ssh + gitolite架设服务器。整个过程可分为3步,第一,安装gitolite;第二,生成一个管理整个服务器所有git的git仓库gitolite-admin,由用户 i5_admin在客户端进行管理上传控制,i5_admin通过这个仓库控制其他仓库的创建删除,以及权限设置等。第三,创建seu_ccplayer仓库,添加用户组,用户,测试。


2.1 安装gitolite

2.1.1 服务器的动作

        服务器要做两件事。第一件事,创建服务器端的git专用用户(帐号),所有用户都通过此帐号访问git库。要注意的是,客户端用这个帐号通过ssh登录服务端的时候,是得不到shell的使用权的,用ssh git@server的时候会报错:PTY allocation request failed on channel 0,报错现象和 ssh [email protected]是一样的。服务器要做的第二件事,是安装gitolite。

       第一件事,创建专用账户,常用user name 为git:

            sudo adduser --system --shell /bin/bash --group git

           设置密码:

           sudo passwd git

           建议git搭建完毕后取消密码,但是我偷懒,就没有取消了。

        第二件事,安装gitolite:

           git clone git://github.com/ossxp-com/gitolite.git     //从github上下载源码

          mkdir -p $HOME/bin $HOME/share/gitolite/conf  $HOME/share/gitolite/hooks    //建立命令,conf,和hooks目录

              cd gitolite/src

              gl-system-install $HOME/bin $HOME/share/gitolite/conf $HOME/share/gitolite/hooks

              把export PATH=/home/git/bin:$PATH写入到bash.rc里

              gl-setup ../ssh_pub/i5_admin.pub// 这个pub文件,是由用户 i5_admin在客户端通过ssh-keygen -f ~/.ssh/i5_admin生成的pub文件,传到服务器端,这样i5_admin就成为了git的管理用户了。

           

2.1.2 客户端的动作

        首先,需要先生成一个admin的公钥/私钥:

         ssh-keygen -f ~/.ssh/i5_admin

        这样在客户端~/.ssh/ 生成了一个i5_admin.pub 和一个i5_admin, 把i5_admin.pub传到服务器端,服务器端用gl-setup来装gitolite。当服务器端完成以上安装后,客户端克隆git的管理库, 首先使用ssh别名,创建或打开编辑~/.ssh/config, 添加下几行:

         host gitolite

                  user git

                  hostname 192.168.123.173

                  port 22

                  identityfile ~/.ssh/i5_admin

        然后克隆管理库:

         git clone gitolite:gitolite-admin

         就能克隆一个库gitolite-admin下来,这个库是用来管理服务器端上所有的其他git库和所有人的权限的。

2.2 增加git库和用户

2.2.1 关于git管理库

        在客户端clone下来的gitolite-admin,先看一下里面的文件和结构,有两个目录,文件简析如下:

        gitolite-admin/conf/gitolite.conf:这个文件记录了所有的git仓库的状况。在安装初始,就建立了两个repo,一个是gitolite-admin, i5_admin具备所有读写创建权限,另外一个是testing, 所有用户具有读写创建权限。

        gitolite-admin/keydir/: 这个目录下记录了所有用户的pub公钥。

        因此,要增加用户,把用户的公钥添加到gitolite-admin/keydir/下;要增加仓库或者修改用户对每个仓库的权限,修改gitolite-admin/conf/gitolite.conf 文件;然后把这些修改,先commit到本地仓库,再push到服务器端,便完成修改。


2.2.2 增加用户

         首先,新增用户通过ssh-keygen生成公钥,例如 litong.pub, 传给管理员客户端(i5_admin)的gitolite-admin/keydir/目录下,然后通过

         git add keydir;

         git commit -m "add user litong"

         git push origin master

         来把用户的pub上传到服务器端。

          这时,我们查看一下服务器端git用户主目录下的.ssh/authorized_keys文件,会发现新增的用户公钥也附加在其中:

         command="/home/git/bin/gl-auth-command litong",no-port-for......


2.2.3  增加仓库

         修改gitolite-admin/conf/gitolite.conf,增加仓库及用户权限:

         @media = i5_media i5_admin litong

         repo    seu_ccplayer
                     RW+     =  @media
         再把这个文件commit, push到服务器端,则在服务器端增加了仓库seu_ccplayer,也创建了组media,用户有i5_media, i5_admin litong,然后组media对仓库seu_ccplayer有读写创建分支等等权限。

         这里补充一点,git的版本库都位于服务器端用户目录下的repositories目录下,这是由.gitolite.rc决定的。

        另外,关于授权的各种细节,可以参看《git权威指南》,这里抄一下里面的一个例子,呵呵呵:

        @admin = jiangxin

        @dev = dev1 dev2 badboy jiangxin

       @test = test1 test2


       repo testing

             R = @test   //组test 具有只读权限

             - = badboy  //禁用指令,让用户badboy只对版本库具有读操作的权限

             RW = @dev test1      //组dev, 用户test1对仓库有读写权限

            RW+ = @admin     //组admin具有读写权限,并且允许强行推送

      总结下来,各用户的权限如下:

     test1:具有读写权限

     jiangxin: 具有读写权限,并且能强行推送

     badboy: 只对版本有读操作,这个要留意。

三. 总结 & 疑问

         虽然个人觉得,git在使用方面比svn, cvs要繁琐,因为我作为git的仓库管理者,不能直接在服务器端看到每个仓库的文件目录,总是要通过管理者(i5_admin)在客户端管理一个管理git的git,有点麻烦,而且各种授权也不是太习惯,不过,也没办法了,既然它能被广泛使用那总是要有道理的。下一步,要试一下做各种分支和恢复功能,要在这个星期内试验搞定,不然下一个project马上就要来了,再不搞搞好我就会陷入下一个漩涡之中了。嗯,加油加油~~~~~


你可能感兴趣的:(工具使用)