【发布时间】:2014-06-04 23:46:55
【问题描述】:
我在推送到托管 redmine 和存储库的服务器时遇到问题。我确实有用于 redmine 和最新 gitolite v3.5.x 的 gitolite redmine 插件。当我克隆存储库时,即
git clone git@<ip address>:repositories/test-project-redmine.git
// btw: i do get asked for password even though i have send my public key to redmine ?
这个存储库被克隆没有问题。当我创建一个简单的 readme.txt 文件然后我尝试将其推送回存储库时,我得到以下内容
任何人都可能导致这个问题?谢谢:)
更新:
我已经运行了find / -path '*Gitolite/Hooks/Update.pm' -print 2>/dev/null,是的,这些文件确实存在。我还检查了运行存储库的用户'git' 的文件权限,他拥有所有必需的权限。附上图片。
但是搜索没有返回任何关于 perl 的内容
我在 github 上找到了THIS - 官方插件页面 - 问题的理论解决方案。我已经按照建议插入了这个:
__DATA__
#!/usr/bin/perl
BEGIN {
exit 0 if exists $ENV{GL_BYPASS_UPDATE_HOOK};
}
use strict;
use warnings;
...
进入以下文件:
/<git user home dir>/bin/lib/Gitolite/Hooks/Update.pm
/<git user home dir>/gitolite/src/lib/Gitolite/Hooks/Update.pm
/<git user home dir>/.gitolite/hooks/common/update
但是仍然没有成功...?
【问题讨论】:
-
这是git
pre-recievehook 在远程端的错误安装。该钩子是用 perl 编写的,并且缺少一些 perl 模块 -
@user3159253 我在服务器上有所有的 perl 模块,所以它不能缺少一些东西
-
嗯,它说得很清楚。我建议检查 Gitolite/Hooks/Update.pm 的存在(使用
find / -path '*Gitolite/Hooks/Update.pm' -print 2>/dev/null),然后如果文件确实存在,检查它是否驻留在目录中,perl在其中搜索模块(从消息中复制@INC),最后检查模块文件权限是否适合运行存储库的帐户。 -
@user3159253 我已经检查并且文件存在 + 为运行存储库的用户设置了正确的权限。搜索返回 0 关于 perl。而且我不太明白应该在哪里复制 - 问题已编辑
-
好吧,你可以检查钩子是否没有在 chrooted 或其他受限制的环境中执行。或者,更好的是,您可以将这个和其他必需的模块直接复制到挂钩目录中,保留结构(即
<hookdir>/Gitolite/Hooks/Update.pm)。这当然是一个丑陋的解决方案,但可能会有所帮助
标签: git redmine githooks gitolite