git,gitolite错误推送

buf*_*fle 17 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'
Run Code Online (Sandbox Code Playgroud)

我不知道我该做什么.

你能帮助我吗?

谢谢

rob*_*dez 12

开始之前:gitbox是安装了git和gitolite的远程机器.该git的用户是gitolite作为运行在gitbox用户.

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

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

步骤1)生成新的密钥对

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

ssh-keygen -t rsa -f john_git_rsa
Run Code Online (Sandbox Code Playgroud)

输出将是一组私有(john_git_rsa)和public(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
Run Code Online (Sandbox Code Playgroud)

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

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

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

ssh://git@yourgitbox.com:22/reponame.git
Run Code Online (Sandbox Code Playgroud)

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

现在你的推动应该有效.


Cha*_*esB 11

谷歌搜索"在钩子/更新时使用lib的空编译时间值",第一个结果是在Gitolite FAQ中:

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

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

上一篇文章:

对gitolite使用不同的密钥对.设置页面中的讨论稍长一些.另请参阅为什么绕过导致问题 以及ssh中的文档为背景.

  • 谢谢你的答案,但如何使用不同的钥匙对gitolite? (2认同)