18

我刚刚安装了 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'

我不知道我必须做什么。

你能帮助我吗?

谢谢

4

3 回答 3

12

谷歌搜索“在挂钩/更新时为使用 lib 提供的空编译时间值”,第一个结果在Gitolite 常见问题解答中:

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

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

上一个项目符号:

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

于 2012-04-23T15:58:54.240 回答
12

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

您可以通过 (1) 生成新的密钥对,(2) 在 gitbox 上注册公钥,以及 (3) 通过确保在连接到 gitbox 时始终以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

现在,执行 >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

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

现在你的推送应该起作用了。

于 2012-07-28T13:58:22.363 回答
0

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

于 2015-09-24T11:26:31.293 回答