我正在将我的gitlab实例移动到另一台服务器而我遇到了问题。 克隆工作正常,但推送错误,我无法弄清问题在哪里。 在gitlab中,日志没有用。
git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 351 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to access master!
remote: error: hook declined to update refs/heads/master
To git@server:user/repo.git
! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'git@server:user/repo.git'
我不知道问题在哪里,我改变了一点配置。 Repos和satelites在以前的服务器符号链接到/media/data/git/repositories
的位置现在是/home/git
符号链接到/media/disk/git
但我不认为这是问题所在。
编辑:// gitlab:检查是一切还好gitlab-shell检查没关系
答案 0 :(得分:5)
[TL:DR]
经过一段沮丧的时间和大量的反复试验后,我找到了解决这个问题的方法(无论如何对我来说)。
cd / home / git / repositories
rm -rf * / * / hooks / update
[说明]
我从6.3升级 - > 6.9顺序没有问题在前端,但(愚蠢的我)没有检查push&拉每次,所以我不知道这开始发生的确切位置。我怀疑6.7升级后。 SSH和HTTP推送&拉停止工作但错误略有不同。我搜索了存储库目录中的符号链接,就像一些线程说的那样,我还运行了chmod和chown来确保git可以访问所有存储库。我还检查了NGINX配置,以确保它指向正确的IP / FQHN。没有骰子,同样的错误。我终于找到了this issue,它引导我检查了一些事情,最后是上面的解决方案。
我不确定这个修复是否是因为每个repo的hooks文件夹中的'update'文件都是符号链接,或者因为文件中的某些东西,但现在我可以推送&正常拉。
答案 1 :(得分:2)
我使用Bitnami版本和先前配置的config.yml
文件指向符号链接而不是实际目录。
我已修复此问题,将gitlab-shell config.yml
更改为指向真正的存储库目录。
# repos_path: "/opt/gitlab-6.3.0-1/apps/gitlab/repositories"
到
repos_path: "/home/git"
答案 2 :(得分:1)
在全新安装时,当/ home是/ usr / home的符号链接时,我遇到严重的问题。
gitlab-shell/config.yml
包含repos_path: "/home/git/repositories
,导致您在上面引用的错误输出相同。将规范路径放在其中可以纠正这个问题。如果您看到http
流量,您会看到两个GET,一个带//api/v3/internal/allow/allowed
个参数key_id
,action
,ref
和project
在我的情况下,project
在第一次通话时为rpaisley/asdf
,第二次通话时为usr/rpaisley/asdf
。
我将深入研究一下,看看我是否至少可以让Gitlab检测到它不是规范路径,并在不能正常工作之前警告用户。
答案 3 :(得分:0)
我有同样的问题,并且认为@Kythrin的答案解决了它,但偶然发现了另一个相关问题,这可能是发布解决方案的合适位置:
是的确,现在'推送'到主存储库工作,但需要更新挂钩以通过提交和放大自动关闭问题。 push(例如,git commit -m "closes #1"
应该关闭该特定存储库的问题#1)。删除更新挂钩时,这不起作用。如果未删除更新挂钩,则推送不再起作用。经过数小时的故障排除后,问题是无法使用标准方式通过
SSH:// GIT中@的git [MYSERVER] .COM:[portNr] / [git的项目] / [GIT-库]的.git
,而是需要一个目录前缀(注意:仅在OS X 10.8+上,Windows 8工作正常)来克隆正确的存储库。
据我所知,这种行为的原因是git用户已经存在的公共ssh授权密钥没有检索有关远程rempository的信息的命令,它是父目录内的相对路径等。而不是从已经拥有必要命令的正确,远程 gitlab 用户那里获取该信息。因此,不使用gitlab命令的密钥,而是使用先前创建的密钥。 我怀疑因为git安装了OS X / XCode,当我们稍后在服务器上设置Gitlab并连接时,git用户的公钥没有更新?
现在克隆只指定远程存储库的相对地址,并使用更新挂钩通过提交方便地关闭问题。
(如果技术上更有经验的用户或使用英语作为第一语言的用户能够解释该问题以及更好的原因,请随时编辑或建议编辑我的帖子)
解决方案写在Trouble Shooting Guide:
中我的项目的SSH路径不起作用,因为它缺少存储库目录。
git@git.myserver.com:MYGROUP / proj1.git
应该是
git@git.myserver.com:库/ MYGROUP / proj1.git
问题:https://github.com/gitlabhq/gitlabhq/issues/3686中描述。在设置gitlab之前,git用户的公钥已经存在于〜/ .ssh / authorized_keys中,gitlab的密钥应该以:
开头命令=“/家/ GIT中/ gitlab /应用/ gitlab / gitlab - 壳/斌/ gitlab - 壳 键-2" ,没有端口转发,无-X11-转发,无代理转发,无PTY
解决方案:从〜/ .ssh / authorized_keys中删除不以上述命令开头的键
答案 4 :(得分:0)
我还通过多个步骤升级到6.9。并遇到这个问题。它似乎与GitLab社区版中的以下问题有关: https://gitlab.com/gitlab-org/gitlab-ce/issues/333
存储库中的更新挂钩是符号链接,因此我在/home/git/gitlab-shell/lib/gitlab_update.rb
中评论安全检查(符号链接的来源是什么):
10:27:34me@hogwarts:/home/git/gitlab-shell$ git diff lib/gitlab_update.rb
diff --git a/lib/gitlab_update.rb b/lib/gitlab_update.rb
index 4b0673f..174bbad 100644
--- a/lib/gitlab_update.rb
+++ b/lib/gitlab_update.rb
@@ -36,13 +36,14 @@ class GitlabUpdate
# get value from it
ENV['GL_ID'] = nil
- if api.allowed?('git-receive-pack', @repo_name, @actor, @ref_name, @oldrev, @newrev, forced_push?)
- update_redis
- exit 0
- else
- puts "GitLab: You are not allowed to access #{@ref_name}!"
- exit 1
- end
+ #if api.allowed?('git-receive-pack', @repo_name, @actor, @ref_name, @oldrev, @newrev, forced_push?)
+ # update_redis
+ # exit 0
+ #else
+ # puts "GitLab: You are not allowed to access #{@ref_name}!"
+ # exit 1
+ update_redis
+ exit 0
end
这是一个黑客攻击,但现在对我有用。希望有人或我找时间深入研究这个问题。