看着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本文包括以下几个章节:
添加新用户或代码库
不要在服务器上直接手动添加新用户或创建代码库。 Gitolite通过修改一个名为“gitolite-admin"的特殊代码库来完成新用户、代码库的创建及访问控制规则的设置。------要想管理您的代码库,请先在本地做如下操作(如果您还没有这样做的话)1git clone git@host :gitolite-admin注意:如果服务器提示您输入密码,那么请查检前面所说的准备工作是否已经做了。命令成功后,您可以看到在gitolite-admin目录下有两个子文件夹:conf和keydir。要添加新用户alice, bob and carol, 向他们索取公钥并将这些公钥复制到keydir中,如:alice.pub, bob.pub, carol.pub要添加新代码库,并设置访问控制的话,编辑conf/gitolite.conf文件,在文件尾追加如下代码:1repo foo2RW+=alice3RW =bob4R =carol对于访问控制的具体介绍,请参照”访问控制“章节。当你完成这些操作之后,执行如下命令使之生效:1git add conf2git add keydir3git commit -m 'added foo, gave access to alice, bob, carol'4git push当push完成后,gitolite会自动创建三个新用户,并将他们的公钥文件添加到~/.ssh/authorized_keys文件中, 同时创建一个新的名为‘foo’的空代码库。 一定要注意这里面提到的安装的准备条件的第三步(确保公钥文件已经准备好),我因为对这个的理解有误,造成了我很多的麻烦:
先谈谈正确的做法,把你作为管理员的公钥文件上传到git服务器上(注意名字,否则生成的配置文件会读错你本地的用户名,但实际上只要你通过了本地ssh到git服务器的认证,便不妨碍管理员进行管理)
1git clone git://github.com/sitaramc/gitolite2mkdir -p $HOME/bin3gitolite/install -to $HOME/bin4gitolite 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 oflines later).You're bypassing gitolite. You cloned the repo using the full path (i.e.,including the repositories/ prefix), either directly on the server, orvia 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 cantry gitolite push instead of git push. BUT... this defeats allgitolite access control, so if you're going to do this often, maybe youdon't need gitolite!