我正在调试一个旧的旧版 gitolite 服务器实例问题,其中 git Push 失败并显示“FATAL:
以下是 gitolite 实例详细信息:
在服务器(主服务器)上以“gituser”身份登录时,对任何克隆的 gitolite 存储库进行任何 git 编辑后,命令“git push”失败并出现以下错误:。任何其他 git 管理员都知道为什么可能会出现以下错误。
注意:类似的 git Push 适用于其他系统的用户。尝试使用 git/ssh 详细日志记录进行调试,更改远程 set-url ,没有太多附加信息,并且不确定为什么 .gitolite 日志显示 mode=local 和镜像,而步骤在 master 上。我需要尝试 git 克隆、编辑和 master 的 git 推送。
看到错误:
$ git push
FATAL: gitmaster: 'gitolite-admin' is local
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
~/.gitolite/logs/xxxxx 条目:
.... ssh ARGV=server-gitmaster SOC=git-receive-pack 'gitolite-admin' FROM=<ip>
.... mirror,pre_git,gitolite-admin,user=,sender=gitmaster,mode=local
git远程-v显示:
origin gituser@gitmaster:gitolite-admin (fetch)
origin gituser@gitmaster:gitolite-admin (push)
gituser 的 .ssh/config:
...
host gitmaster
user gituser
hostname <gitmaster.domain.name>
gitolite.conf 片段:
repo gitolite-admin
RW+ = @admins
option mirror.master = gitmaster
option mirror.slaves = gitslave
尝试使用 git 和 ssh 详细日志记录,分析 ssh 和 gitolite 日志,但没有太多有用的信息。
Gitolite 的镜像功能旨在保持主存储库与从存储库同步。在您的情况下,
gitmaster
是主机,gitslave
是从机。.ssh/config
文件定义了别名(gitmaster
和 gitslave
),用于简化与这些服务器的 SSH 连接。gitmaster
别名解释为本地存储库而不是远程服务器。它尝试在本地推送更改,从而导致“FATAL: <host>: '<repo>' is local
”错误。你可以在Triggers/Mirroring.pm
的Gitolite源代码中看到定义并抛出的错误,它应该是由:引起的
gitolite.conf
为了测试,请尝试注释掉或从
gitmaster
中删除 .ssh/config
别名:这应该强制使用实际主机名,防止 Gitolite 将存储库视为本地存储库。git push [email protected]:gitolite-admin
关于gitolite.conf,作为临时措施,禁用镜像看看推送是否有效。