Git push - 似乎不是 git 存储库(ssh 指向错误的目录)

Posted

技术标签:

【中文标题】Git push - 似乎不是 git 存储库(ssh 指向错误的目录)【英文标题】:Git push - does not appear to be a git repository (ssh pointing to wrong directory) 【发布时间】:2014-05-04 19:47:31 【问题描述】:

案例:

我已经按照this 教程在ubuntu 12.04 版中安装了项目omnibus-gitlab。

一切似乎都是正确的。服务器通过局域网正常工作,IP为192.168.1.68,我可以访问gitlab的所有功能(使用浏览器)。

在那里,我创建了一个名为 root 用户(管理员)的项目,名为 project1 (密钥也已正确配置)

通过浏览器创建项目后,我在本地工作区再次创建它,将其定义为提交的存储库(进行了一些更改)并将其推送到服务器。基本上我遵循了这些步骤:

mkdir teste
cd teste
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@192.168.1.68:root/project1.git
git push -u origin master

push命令的那一刻,终端返回了这个消息:

root@pcname:~Projects/project1# git push -u origin master
git@192.168.1.68's password:
fatal: 'root/project1.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

好的。做了一些尝试来发现为什么会发生这种情况,我才意识到当我们访问 ssh 服务器 git@192.168.1.68 时,我们并没有访问真正的存储库目录,而是访问了之前的 3 个级别。

所以,这是包含存储库的目录:

/var/opt/gitlab/git-data/repositories 在这里我们有 root/project1.git 目录/存储库。

当我们访问git@192.168.1.68:root而不是那个路径时,我们实际上是在访问:

/var/opt/gitlab 没有root 目录。

所以结果自然是git警告说没有找到仓库。

ps:我们是否使用git@192.168.1.68:git-data/repositories/root/project1.git代替git@192.168.1.68:root/project1.git,它工作得很好,我们能够正常推送存储库。

问题:

为什么会发生这种情况,如何将 ssh 地址指向正确的目录(或存储库)路径?

【问题讨论】:

如果root重定向到/var/opt/gitlab你能不使用git remote add origin git@192.168.1.68:root/git-data/repositories/project1.git吗? 否,因为git@192.168.1.68:root/git-data/repositories/project1.git 将访问路径/var/opt/gitlab/root/git-data/repositories/project1.git。正确的路径是/var/opt/gitlab/git-data/repositories/root/project1.git,所以我可以使用命令git@192.168.1.68:git-data/repositories/root/project1.git但这似乎不是正确的方式 【参考方案1】:

在添加要推送到的源时,您应该能够使用您想要的目录的绝对路径:

git remote add origin git@192.168.1.68:/var/opt/gitlab/git-data/repositories/root/project1.git

或者,要回答有关将 ssh 定向到存储库目录(或其他路径)的问题,您需要创建一个将该路径作为主目录的用户并在源连接中使用它。假设您将 newuser 的主目录设为您要使用的 repositories 目录:

git remote add newuser@192.168.1.68:root/project1.git

【讨论】:

【参考方案2】:

我想我遇到了同样的问题。

您可能需要正确配置您的密钥。您的 /var/opt/gitlab/.ssh/authorized_keys 应该看起来像(当然包含您的密钥):

command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB..your.key...... someoneskey@keylabs.lab

(!)请注意,某些文档似乎已经过时并且路径已更改

如果你 ssh 到你的节点

ssh -T git@mynode.com

应该说:

Welcome to GitLab, <yourname>!

并且连接应该被关闭。如果它说

Welcome to GitLab, Anonymous!

您的用户未被识别。您需要在 Web 界面中将您的密钥添加到您的用户。

如果您能够通过 ssh 使用 git 用户登录,则您的授权密钥未按上述配置

编辑: 需要明确的是,在设置 gitlab 时,您似乎不需要任何额外的 authorized_keys 。我的 authorized_keys 文件是空的,gitlab 可以正常工作。

【讨论】:

以上是关于Git push - 似乎不是 git 存储库(ssh 指向错误的目录)的主要内容,如果未能解决你的问题,请参考以下文章

git:在 Mac 上尝试将存储库推送到 Amazon Elastic Beanstalk 时,“aws.push”不是 git 命令

Git 推送:“致命的 'origin' 似乎不是 git 存储库 - 致命的无法从远程存储库读取。”

git致命:'development'似乎不是git存储库

无法将 master 推送到 Github -“origin”似乎不是 git 存储库/权限被拒绝

无法将 master 推送到 Github -“origin”似乎不是 git 存储库/权限被拒绝

git:使用(本地)远程存储库