git push origin master -> fallthru 拒绝了此操作。

3
当我尝试执行 'git push origin master' 时,出现了“DENIED by fallthru”错误。
我已经花费了最近三个小时搜索解决方案,但是我还是无法弄清楚如何解决它。
gitolite.log
2012-10-15.16:43:47 16930   ssh ARGV=david_neudorfer_lbox_com_1350337154    SOC=git-receive-pack 'Treasure-Hunt.git'    FROM=10.0.4.185
2012-10-15.16:43:47 16930       repo 'Treasure-Hunt' missing
2012-10-15.16:43:47 16930       access(Treasure-Hunt, david_neudorfer_lbox_com_1350337154, W, 'any'),-> W any Treasure-Hunt david_neudorfer_lbox_com_1350337154 DENIED by fallthru
2012-10-15.16:43:47 16930       trigger,Writable,access_1,ACCESS_1,Treasure-Hunt,david_neudorfer_lbox_com_1350337154,W,any,W any Treasure-Hunt david_neudorfer_lbox_com_1350337154 DENIED by fallthru
2012-10-15.16:43:47 16930   die W any Treasure-Hunt david_neudorfer_lbox_com_1350337154 DENIED by fallthru<<newline>>(or you mis-spelled the reponame)

gitolite.conf

repo    test_project
  RW+                            = david_neudorfer_lbox_com_1350344583
repo    projectsmadesimple-web
  RW+                            = david_neudorfer_lbox_com_1350344583
repo    treasure-hunt
  RW+                            = david_neudorfer_lbox_com_1350344583

我注意到名称后面的数字是不同的。希望这与此有关,我尝试了:

repo    test_project
  RW+                            = david_neudorfer_lbox_com_1350344583
  RW+                            = david_neudorfer_lbox_com_1350337154

无法正常工作。如果有建议将不胜感激。


1
你有检查过大小写的差异是否重要吗? - cjc343
在项目名称中吗?我不认为是这个问题,因为这在多个项目中都发生了。 - David Vasandani
1
你的配置文件中使用了 treasure-hunt 作为仓库名称,但在尝试推送时使用了 Treasure-Hunt 作为仓库名。你是否测试过至少一个大小写完全匹配的项目? - cjc343
1
我花了一分钟的时间找到了gitolite的安装位置和我已经授权的密钥,但是我在这里确认了大写字母必须完全匹配。 - cjc343
2个回答

3

正如cjc343评论中指出的,最后一个错误行告诉我们:

2012-10-15.16:43:47 16930   die W any Treasure-Hunt 
                            DENIED by fallthru
                            (or you mis-spelled the reponame)

这个错误消息来自于 src/gitolite-shell的main()函数,在调用src/lib/Gitolite/Conf/Load.pm的repo_missing()函数后出现。

sub repo_missing {
    my $repo = shift;
    sanity($repo);

    return not -d "$rc{GL_REPO_BASE}/$repo.git";
}

它查找一个目录,这在Unix系统上是大小写敏感的。

然后您需要解决ID问题:您应始终使用相同的名称进行身份验证。


1
已解决:
在我的情况下,我将仓库从我的账户移动到了一个组,因此远程仓库的路径发生了改变,但本地仓库没有变化。 所以我在本地仓库中更改了路径(配置文件)。
[remote "origin"]
url = git@git.me:mygroup/repo.git              // previously git@git.me:myname/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接