看着github上的讲解,本来以为这工具很简单就能安装上的,但中间还是出现了各种报错,最后弄了好久才弄通是怎么回事,现在分享一下这款工具的操作。
   gitolite 是方便通过 Git 与 ssh 架设中央服务器的软件。
   首先看看github上对gitolite的介绍
   Gitolite allows you to setup git hosting on a central server, with very fine-grained access control and many (many!) more powerful features.

   它的具体安装方法和用法都在github上README.txt里有详细介绍(这也是我刚开始觉得简单的原因)。那我们看一看它的基础文档:(为了方便,在此是翻译后的文档),本篇主要关注安装部署和基本用法
本文包括Gitolite的安装及一些常用功能的使用方法. 如果您需要更详细的介绍, 或在解决某个问题, 异或只是想看看那些这里没有提及的功能的话, 请阅读Gitolite的在线文档:  http://sitaramc.github.com/gitolite/master-toc.html
本文包括以下几个章节:
  1. 安装和部署
  2. 添加新用户或代码库
--------------------------------------------------------------------

安装和部署

---------------------

服务器环境

  • 任意UNIX操作系统
  • SH
  • git 1.6.6+
  • perl 5.8.8+
  • openssh 5.0+
  • 一个独立的用户(本文中假定该用户名为git), 仅在shell中被其他用户的'su git'命令使用

安装步骤

  1. 登录系统, 打开shell, 并切换到git(即前面提到的独立用户, 译者注)用户
  2. 确保~/.ssh/authorized_keys文件不存在或为空文件. (gitolite使用此文件保存公钥文件)
  3. 确保您的公钥文件已经准备好, 如: ~/YourName.pub (创建公钥文件的方法: ssh-keygen -t rsa -f ~/.ssh/YourName, 其中YourName为一个对您来说有意义的名字, 译者注)
  4. 执行以下命令:

    1 git clone git://github.com/sitaramc/gitolite
    2 mkdir -p $HOME/bin
    3 gitolite/install -to $HOME/bin
    4 gitolite setup -pk YourName.pub
    如果最后一行命令出错的话, 可能是因为'bin'目录不在你的PATH中, 您可以选择将bin加入或直接执行:

    1 $HOME/bin/gitolite setup -pk YourName.pub

添加新用户或代码库

不要在服务器上直接手动添加新用户或创建代码库。 Gitolite通过修改一个名为“gitolite-admin"的特殊代码库来完成新用户、代码库的创建及访问控制规则的设置。

------

要想管理您的代码库,请先在本地做如下操作(如果您还没有这样做的话)
1 git clone git@host :gitolite-admin
注意:
如果服务器提示您输入密码,那么请查检前面所说的准备工作是否已经做了。

命令成功后,您可以看到在gitolite-admin目录下有两个子文件夹:conf和keydir。
要添加新用户alice, bob and carol, 向他们索取公钥并将这些公钥复制到keydir中,如:alice.pub, bob.pub, carol.pub
要添加新代码库,并设置访问控制的话,编辑conf/gitolite.conf文件,在文件尾追加如下代码:
1 repo foo
2 RW+=alice
3 RW          =bob
4 R           =carol
对于访问控制的具体介绍,请参照”访问控制“章节。
当你完成这些操作之后,执行如下命令使之生效:
1 git add conf
2 git add keydir
3 git commit -m 'added foo, gave access to alice, bob, carol'
4 git push
当push完成后,gitolite会自动创建三个新用户,并将他们的公钥文件添加到~/.ssh/authorized_keys文件中, 同时创建一个新的名为‘foo’的空代码库。

一定要注意这里面提到的安装的准备条件的第三步( 确保公钥文件已经准备好),我因为对这个的理解有误,造成了我很多的麻烦:
先谈谈正确的做法,把你作为管理员的公钥文件上传到git服务器上(注意名字,否则生成的配置文件会读错你本地的用户名,但实际上只要你通过了本地ssh到git服务器的认证,便不妨碍管理员进行管理)
1 git clone git://github.com/sitaramc/gitolite
2 mkdir -p $HOME/bin
3 gitolite/install -to $HOME/bin
4 gitolite setup -pk YourName.pu
依次执行完,你便可以再本地直接
git clone git@host: gitolite - admin
进行管理了。

以上是正确的方法设置,你的push及客户端clone均不受限制,可谓风雨无阻。

下面聊聊我出现的毛病啊,真是整死我了:
我准备的公钥文件是git服务器上git用户的公钥(真不知道当时怎么想的),然后做了和大家一样的操作,然后我在本地clone的时候必须跟上gitolite-admin的路径才能clone下来,不但如此啊,我在配置文件里新建的库,clone的时候也必须是完整的路径,并且当我的客户端有修改要更新,push不上去,一直在报各种各样的错,各种百度谷歌啊,主要有句提示是remote: Empty compile time value given to use lib at hooks/update line 6
相关信息有:
 Empty compile time value given to use lib at hooks/update line 6
  • (followed by Can't locate Gitolite/Hooks/Update.pm in @INC a couple of lines later).
    You're bypassing gitolite. You cloned the repo using the full path (i.e., including the repositories/ prefix), either directly on the server, or via ssh but with a key that gives you shell access.
    Solution: same as for the previous bullet.
    NOTE: If you really must do it, and this is a one-time thing, you can try gitolite push instead of git push. BUT... this defeats all gitolite access control, so if you're going to do this often, maybe you don't need gitolite!

如此看来需要在有gitolite的环境里执行gitolite push才能完成push的动作;
虽然这样也可以对git库进行管理,但是中间却增添了诸多的麻烦步骤,实在是有违人道,因为这个弱智的错误导致我用了一晚上的时间才搞出来,希望大家引以为戒。。。