基于Gitolite的Git服务架设

如果不是要与他人协同开发,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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6372872b6601016fe8f92c3ba3e54e46.html