看着github上的讲解,本来以为这工具很简单就能安装上的,但中间还是出现了各种报错,最后弄了好久才弄通是怎么回事,现在分享一下这款工具的操作。
gitolite 是方便通过 Git 与 ssh 架设中央服务器的软件。
首先看看github上对gitolite的介绍
它的具体安装方法和用法都在github上README.txt里有详细介绍(这也是我刚开始觉得简单的原因)。那我们看一看它的基础文档:(为了方便,在此是翻译后的文档),本篇主要关注安装部署和基本用法
注意:
对于访问控制的具体介绍,请参照”访问控制“章节。
当push完成后,gitolite会自动创建三个新用户,并将他们的公钥文件添加到~/.ssh/authorized_keys文件中, 同时创建一个新的名为‘foo’的空代码库。
一定要注意这里面提到的安装的准备条件的第三步( 确保公钥文件已经准备好),我因为对这个的理解有误,造成了我很多的麻烦:
先谈谈正确的做法,把你作为管理员的公钥文件上传到git服务器上(注意名字,否则生成的配置文件会读错你本地的用户名,但实际上只要你通过了本地ssh到git服务器的认证,便不妨碍管理员进行管理)
依次执行完,你便可以再本地直接
git clone git@host:
进行管理了。
以上是正确的方法设置,你的push及客户端clone均不受限制,可谓风雨无阻。
下面聊聊我出现的毛病啊,真是整死我了:
我准备的公钥文件是git服务器上git用户的公钥(真不知道当时怎么想的),然后做了和大家一样的操作,然后我在本地clone的时候必须跟上gitolite-admin的路径才能clone下来,不但如此啊,我在配置文件里新建的库,clone的时候也必须是完整的路径,并且当我的客户端有修改要更新,push不上去,一直在报各种各样的错,各种百度谷歌啊,主要有句提示是remote: Empty compile time value given to use lib at hooks/update line 6
相关信息有:
如此看来需要在有gitolite的环境里执行gitolite push才能完成push的动作;
虽然这样也可以对git库进行管理,但是中间却增添了诸多的麻烦步骤,实在是有违人道,因为这个弱智的错误导致我用了一晚上的时间才搞出来,希望大家引以为戒。。。
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
本文包括以下几个章节:
- 安装和部署
- 添加新用户或代码库
--------------------------------------------------------------------
安装和部署
---------------------
服务器环境
- 任意UNIX操作系统
- SH
- git 1.6.6+
- perl 5.8.8+
- openssh 5.0+
- 一个独立的用户(本文中假定该用户名为git), 仅在shell中被其他用户的'su git'命令使用
安装步骤
- 登录系统, 打开shell, 并切换到git(即前面提到的独立用户, 译者注)用户
- 确保~/.ssh/authorized_keys文件不存在或为空文件. (gitolite使用此文件保存公钥文件)
- 确保您的公钥文件已经准备好, 如: ~/YourName.pub (创建公钥文件的方法: ssh-keygen -t rsa -f ~/.ssh/YourName, 其中YourName为一个对您来说有意义的名字, 译者注)
- 执行以下命令:
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
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 |
一定要注意这里面提到的安装的准备条件的第三步( 确保公钥文件已经准备好),我因为对这个的理解有误,造成了我很多的麻烦:
先谈谈正确的做法,把你作为管理员的公钥文件上传到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 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 push
instead 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库进行管理,但是中间却增添了诸多的麻烦步骤,实在是有违人道,因为这个弱智的错误导致我用了一晚上的时间才搞出来,希望大家引以为戒。。。