错误:未找到存储库。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限并且 repo 存在

Posted

技术标签:

【中文标题】错误:未找到存储库。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限并且 repo 存在【英文标题】:ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and repo exists 【发布时间】:2021-12-07 05:42:54 【问题描述】:

昨天我创建了一个 ssh 密钥并克隆了一个 repo 以供工作。进行一些更改后,我尝试推送提交:

git push
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

I have read this active SO post。我的问题仍然存在。我不知道如何追查这个问题,所以会分享我认为相关的所有内容。

在我的笔记本电脑上,我有个人和工作回购。我的工作工作存在于嵌套在~/Documents/Projects/Zen/Projects/ 下的任何目录中。其他任何地方,例如~/Documents/Projects/Personal/是个人github。

我的 .gitconfig 看起来像这样:

[user]
    email = 12345+doug@users.noreply.github.com
    name = 12345doug

[includeIf "gitdir:/home/doug/Documents/Projects/Zen/"]
    path = ~/.git-zen

/.git-zen 看起来像这样:

[user]
        email = doug@work.com
        name = doug-work

目前我在一个仓库中:

pwd
/home/doug/Documents/Projects/Zen/Projects/analytics-psql-action

准备好提交一些提交:

~/Documents/Projects/Zen/Projects/analytics-psql-action$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

我在这个目录中的 git 配置似乎是正确的:

git config user.name
doug-work

git config user.email
doug@work.com

为了创建我的 ssh 密钥,我在 github.com 上关注了this post。

ssh-keygen -t rsa -b 4096 -C "doug@work.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

然后我将每个 this tutorial 的密钥添加到我的工作 github 设置中。

到目前为止,我认为我已经按照应有的方式进行了所有设置?但是当我尝试从这个 repo 中推送时:

~/Documents/Projects/Zen/Projects/analytics-psql-action$ git push
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

无奈之下,我重命名了 repo 并尝试从新克隆:

git clone git@github.com:work/analytics-psql-action.git # real path actually used not 'work'
Cloning into 'analytics-psql-action'...
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights

在 repo 本身上,如果我进入 repo settings > manage access 我可以看到自己,doug-work 具有管理员访问权限。

如何克隆并推送到 repo?我应该从哪里开始尝试找出为什么我的 ssh 密钥设置不起作用?

【问题讨论】:

我也有同样的问题; ERROR: Repository not found. 被触发,因为存储库是私有的。我不知道为什么在这里使用备用 SSH 身份会导致问题,或者如何解决它。 查看***.com/a/61150726/266747;有一些策略可以将user.email 与给定的 ssh IdentityFile 相关联。我还建议在~/.ssh/config 中为给定的Host 条目添加IdentitiesOnly=yes,这将防止ssh 尝试其他身份。 【参考方案1】:

首先,一些背景知识:在您在这里使用的 URL 中:

git clone git@github.com:...

这个问题唯一真正重要的部分是git@github.com 部分。你也可以这样拼写:

git clone ssh://git@github.com/...

(使用完全相同的剩余文本代替...)具有完全相同的效果。

接下来,要诊断问题,您需要从命令行运行ssh

ssh -T git@github.com

如果您的 URL 显示 git@corp.com,您会想在此处运行 ssh -T git@corp.com,依此类推。也就是说,我们采用user@host 部分并运行ssh -T user@host。这使得它适用于各种公司托管的分支变体,而不仅仅是 GitHub。它还允许我们在 GitHub 上使用多个登录:见下文。

现在,在运行 ssh -T git@github.com 后,您可能会收到权限被拒绝错误,这意味着您在 github.com 上尝试过的密钥没有有效,或者您可以获得这种输出:

Hi M! You've successfully authenticated, but but GitHub does not provide shell access.

(在这里,我们向 GitHub 验证了自己为 M,詹姆斯邦德间谍部门的负责人。)

现在,如果 M 有权访问(读取和写入)存储库,我们将能够读取和写入存储库。但也许 M 只有 read 访问权限,而实际上是 Q 拥有写访问权限。我们偷走了 M 和 Q 的钥匙,但是我们如何以 Q 的身份进入呢?

在我们开始之前,让我们看看如果这种身份验证完全失败该怎么办。我们的下一步是运行:

ssh -Tv git@github.com

这会产生一个 lot 输出,所有输出都以 debug1 为前缀。这里可能有一些关于哪里出了问题的线索。如果没有,我们可以使用ssh -Tvvssh -Tvvv 来获得更多调试输出,前缀为debug2debug3。在查看所有这些输出时,这里通常的怀疑是确保 ssh 正在查看正确的 .ssh/* files,其中存储了您的 ssh 密钥。确保:

ssh 路径正确; ssh 尝试其中的正确文件;和 它实际上可以读取这些文件。

如果没有,请寻找特定于操作系统的方法来为 ssh 提供正确的权限和/或路径。

使用多个身份

作为闯入 MI-5 记录的邪恶间谍,我们已经泄露了 M 和 Q 以及 we now wish to insert our *** horse into the system so that we can attempt an overly elaborate death for James Bond 的密钥。但那是以后的事了:目前,我们以 M 身份进入,但我们需要以 Q 身份进入。应该做什么?

为了以 Q 而不是 M 的身份进入 GitHub,我们需要正确配置 ssh。原因很简单:仅仅在.ssh 目录中列出我们所有的键是行不通的。 ssh 按某种顺序尝试它们,很明显,我们的 ssh 首先尝试我们的 M 键。一旦它起作用,它就会进入,并且 ssh 停止尝试更多的密钥。

我们需要先让我们的 ssh 尝试我们的 Q 键。我们可以删除我们的 M 密钥,但这很烦人:现在我们可以植入我们的特洛伊木马,但我们找不到 Bond 当前的任务,只有 M 可以读取。我们会like to have 是一种选择我们将尝试的键的方法。

这是 .ssh/config 文件的来源:

Host as-q
    Hostname github.com
    User git
    IdentitiesOnly yes
    IdentityFile ~/.ssh/stolen-q-key

Host as-m
    Hostname github.com
    User git
    IdentitiesOnly yes
    IdentityFile ~/.ssh/stolen-m-key

现在我们可以将我们的两个存储库列为ssh://as-m/mi5/bond-assignments.gitssh://as-q/mi5/spy-devices.git,或者as-m:mi5/bond-assignments.gitas-q:mi5/spy-devices.git。 (也就是说,一旦你的 this 部分正常工作,你需要更新与你的克隆相关联的 URL。使用 git remote set-url origin <em>new-url</em>git config --edit 或任何你最喜欢的方式来实现这一点。)

当我们ssh as-q 时,我们将通过 ssh 连接到 github.com (Hostname),使用 git 作为用户名,并使用偷来的 Q 密钥作为密钥。当我们ssh as-m时,我们将连接到同一个主机并使用同一个用户,但这次使用偷来的M键。

我做了所有这些并且 ssh 工作,但 Git-for-Windows 仍然没有

你遇到了另一个问题:

旧版本的 Windows 没有或没有 ssh。 所以 Git-for-Windows 捆绑了一个 ssh(与捆绑 bash 版本的方式相同:git-bash 并不是真正的 Git 的一部分,它只是 使用 Git,捆绑的ssh也不是Git的一部分,只需要使用 Git)。 但捆绑的 ssh 和系统 ssh 是不同的版本,它们使用不同的配置文件

如果系统 ssh 工作正常,告诉 Git 使用系统 ssh,例如,git config --global core.sshCommand ssh。如果还不够,请使用捆绑的 ssh(但是您上面的测试是如何工作的呢?)。

【讨论】:

谢谢你,当我回到我的笔记本电脑时会尝试这些步骤。将删除此评论 .ssh/config 中有as-mas-q。现在我在我的仓库中提交了推送。如何告诉 git 使用哪个配置?与git push 不同,我是否需要添加例如git push as-m? 当我在工作存储库中运行 ssh -T git@github.com 时,我得到“嗨 12345doug!您已成功通过身份验证,但 GitHub 不提供 shell 访问。”看起来它正在使用我的个人 git 凭据,而不是我的工作之一 doug-work。也许我的 includeif 已关闭? 更多信息。当我去git config user.name时,从工作回购中,我确实看到了正确的工作用户名doug-work,而不是个人12345doug 请注意,user.nameuser.email在身份验证期间不使用。当您进行新提交时,它们会更早地使用。是 ssh URL 中的 主机名 使 ssh 查看.ssh/config,并且是 .ssh/config 控制 ssh 将发送哪些密钥。

以上是关于错误:未找到存储库。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限并且 repo 存在的主要内容,如果未能解决你的问题,请参考以下文章

Heroku“权限被拒绝(公钥)致命:无法从远程存储库中读取”问题

GitLab:找不到您要查找的项目。致命:在 Jenkins 中构建时无法从远程存储库中读取

Atlassian Bamboo 无法从远程存储库中读取

ssh:无法解析主机名 git:名称或服务未知 致命:无法从远程存储库读取

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

git:致命:无法从远程存储库读取