git,gitolite错误推送

时间:2012-04-23 15:54:49

标签: git gitolite

我刚刚安装了gitolite但是当我推送存储库gitolite-admin时出现错误:

git push
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 605 bytes, done.
Total 7 (delta 1), reused 0 (delta 0)
remote: Empty compile time value given to use lib at hooks/update line 6
remote: Use of uninitialized value in require at hooks/update line 7.
remote: Can't locate Gitolite/Hooks/Update.pm in @INC (@INC contains:  /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at hooks/update line 7.
remote: BEGIN failed--compilation aborted at hooks/update line 7.
remote: error: hook declined to update refs/heads/master
To ssh://admin@192.168.0.26/home/admin/repositories/gitolite-admin.git
! [remote rejected] master -> master (hook declined)
error: failed to push some refs to   'ssh://admin@192.168.0.26/home/admin/repositories/gitolite-admin.git'

我不知道我必须做什么。

你可以帮帮我吗?

感谢

3 个答案:

答案 0 :(得分:12)

开始之前: gitbox 是安装了git和gitolite的远程计算机。 git 用户是gitolite在gitbox上运行的用户。

您可以通过以下方法克服此错误:(1)生成新的密钥对,(2)在gitbox上注册公钥,以及(3)确保在连接到gitbox时始终以< strong> git 用户使用新的私钥。

对于忍者来说,这可能已经足够了。其余的,这里有更多细节:

步骤1)生成新密钥对

大多数IDE都能够创建新的公钥/私钥对。或者,如果可以访问Linux计算机,则可以使用以下方法生成自己的计算机:

ssh-keygen -t rsa -f john_git_rsa

输出将是一组私有( john_git_rsa )和公共( john_git_rsa.pub )键(也称为密钥对)。您需要在下一步中将公钥复制到gitbox。

步骤2)在gitbox上注册新的公钥

您可以通过快速搜索Google了解如何使用git管理gitolite-admin。简而言之,步骤是:(1)克隆gitolite-admin存储库; (2)将新公钥添加到gitolite-admin / keydir /目录; (3)将更改推送回gitolite-admin存储库。推送触发gitbox在keydir /文件夹中注册任何新密钥,并使用gitbox的git用户的授权用户列表。

您的gitbox现在可以使用 john_git_rsa 私钥接受来自 git 用户身份验证的新连接。

步骤3)确保您与gitbox的连接使用git用户和新私钥

如果您使用终端连接到gitbox,请编辑/创建〜/ .ssh / config文件以包含预先配置您与gitbox的连接的别名。别名如下:

Host gitbox
   User git
   Hostname yourgitbox.com
   Port 22
   IdentityFile ~/.ssh/john_git_rsa

现在,执行诸如&gt; git clone gitbox:reponame.git或&gt; git push gitbox:reponame.git之类的命令可确保您使用git用户和相应的私钥。如果没有这个别名,你必须做一些类似&gt; git clone ssh://git@yourgitbox.com:22 / reponame.git的内容,找出用于指定要使用的私钥的ssh开关 - 不是很好。 (注意:如果您在不使用此别名的情况下进行连接,则会使用您的默认ssh密钥,您将收到权限错误。)

OR 如果您使用IDE(NetBeans,Eclipse等):

您需要找到IDE的SSH设置并将其设置为使用您创建的新私钥(john_git_rsa),而不是在安装期间生成的默认密钥。您还需要确保推送存储库的URI设置为:

ssh://git@yourgitbox.com:22/reponame.git

用户名设置为 git ,密码字段为空。这可以确保当您连接到gitbox时,IDE将提供您刚设置的私钥和git用户。

现在你的推动应该有效。

答案 1 :(得分:11)

搜索“在钩子/更新时使用lib的空编译时间值”,第一个结果在Gitolite FAQ

  

你绕过了gitolite。您使用完整路径克隆了回购   (即包括存储库/前缀),或直接在   服务器,或通过ssh但使用一个可以访问shell的密钥。

     

解决方案:与上一个项目相同。

上一篇文章:

  

对gitolite使用不同的密钥对。还有一点点   设置页面中的讨论。另见why bypassing causes a problem   和ssh中的文件都是背景。

答案 2 :(得分:0)

来自#roberthernande的评论非常好,但我想对此加一些强调。 我安装gitolite(当然还有推送)的大问题是检查,&#39;〜/ bin&#39;目录在PATH环境变量中。我们需要使用export PATH=$PATH:~/bin来设置此设置。如果没有这个选项,我认为,gitolite不能执行他的流程,并且在推送时遇到问题。此外,之后您可以使用gilotile setup ...代替bin/gitolite setup ...