1

我正在将我的 gitlab 实例移动到另一台服务器,但我遇到了问题。clone 工作正常,但是 push 抛出错误,我不知道问题出在哪里。在 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'

不知道哪里出问题了,稍微改一下配置。以前服务器符号链接到/media/data/git/repositories现在的回购和卫星是/home/git符号链接/media/disk/git但我不认为这是问题所在。

EDIT:// gitlab:check 一切正常 gitlab-shell 检查也正常

4

5 回答 5

5

[TL:DR]

经过大量令人沮丧的时间和大量的反复试验,我找到了解决这个问题的方法(无论如何对我来说)。

cd /home/git/repositories

rm -rf */*/钩子/更新

[解释]

我从 6.3 -> 6.9 依次升级,前端没有任何问题,但是(愚蠢的我)没有每次都检查 push & pull,所以我不知道这到底是从哪里开始发生的。我怀疑在6.7升级之后。SSH 和 HTTP 推送和拉取都停止工作,但错误略有不同。我像一些线程所说的那样在存储库目录中搜索符号链接,我还运行了 chmod 和 chown 以确保 git 可以访问所有存储库。我还检查了 NGINX 配置以确保它指向正确的 IP/FQHN。没有骰子,同样的错误。我终于发现了这个问题,这导致我检查了一些事情,最后找到了上面的解决方案。

我不确定这个修复是因为每个 repo 的 hooks 文件夹中的“更新”文件是符号链接,还是因为文件本身的某些东西,但现在我可以正常推拉。

于 2014-06-16T00:49:50.367 回答
2

我使用 Bitnami 版本,之前配置的config.yml文件指向符号链接而不是实际目录。

我修复了这个更改 gitlab-shellconfig.yml以指向真实存储库目录的问题。

# repos_path: "/opt/gitlab-6.3.0-1/apps/gitlab/repositories"

repos_path: "/home/git"
于 2014-01-02T14:05:49.867 回答
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 检测到它不是规范路径,并在根本无法运行之前警告用户。

于 2013-11-12T19:51:53.510 回答
0

我遇到了同样的问题,并认为@Kythrin 的回答解决了它,但偶然发现了另一个相关问题,这可能是发布解决方案的合适位置:

确实,现在“推送”到主存储库可以工作,但是需要更新挂钩来通过提交和推送自动关闭问题(例如,git commit -m "closes #1"应该关闭该特定存储库的问题 #1)。当更新挂钩被删除时,这不起作用。如果更新钩子没有被删除,那么推送就不会再次起作用。经过数小时的故障排除后,问题是无法使用标准方式克隆远程存储库

ssh://git@git.[myserver].com:[portNr]/[git-project]/[git-repository].git

,而是需要一个目录前缀(注意:仅在 OS X 10.8+ 上,Windows 8 工作正常)来克隆正确的存储库。

据我了解,这种行为的原因是 git 用户已经存在的公共 ssh 授权密钥没有检索远程存储库信息的命令,它是父目录内的相对路径等。而不是从已经拥有必要命令的正确远程gitlab用户那里获取该信息。因此,没有使用 gitlab 命令的密钥,而是使用了先前创建的密钥。我怀疑是因为 git 与 OS X/XCode 一起安装,当我们稍后在我们的服务器上设置 Gitlab 并连接时,git 用户的公钥没有更新?

现在只指定远程存储库的相对地址进行克隆,以及使用更新挂钩通过提交方便地关闭问题。

(如果技术上更有经验的用户或以英语为第一语言的用户能够解释该问题以及更好的原因,请随时编辑或建议对我的帖子进行编辑)

解决方案写在故障排除指南中:


无法从远程存储库中读取

错误:从 ssh 克隆不起作用

我的项目的 SSH 路径不起作用,因为它缺少存储库目录。

git@git.myserver.com:mygroup/proj1.git

应该

git@git.myserver.com:repositories/mygroup/proj1.git

问题:在https://github.com/gitlabhq/gitlabhq/issues/3686中描述。在你设置 gitlab 之前,git 用户的公钥已经存在于 ~/.ssh/authorized_keys 中,gitlab 的密钥应该以:

command="/home/git/gitlab/apps/gitlab/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

解决方案:从~/.ssh/authorized_keys 中删除不以上述命令开头的键

于 2014-08-06T17:59:04.887 回答
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

这是一个黑客,但现在对我有用。希望有人或我能找到一些空闲时间来深入研究这个问题。

于 2014-08-12T08:40:53.917 回答