安装git权限管理工具gitolite实践

看着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 byCan't locate Gitolite/Hooks/Update.pm in @INCa couple of lines later).
    You're bypassing gitolite. You cloned the repo using the full path (i.e., including therepositories/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 trygitolite pushinstead ofgit 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库进行管理,但是中间却增添了诸多的麻烦步骤,实在是有违人道,因为这个弱智的错误导致我用了一晚上的时间才搞出来,希望大家引以为戒。。。

你可能感兴趣的:(git,gitolite)