错误:未找到存储库。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限并且 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 -Tvv
或ssh -Tvvv
来获得更多调试输出,前缀为debug2
和debug3
。在查看所有这些输出时,这里通常的怀疑是确保 ssh 正在查看正确的 .ssh/*
files,其中存储了您的 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.git
和ssh://as-q/mi5/spy-devices.git
,或者as-m:mi5/bond-assignments.git
和as-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-m
和as-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.name
和 user.email
在身份验证期间不使用。当您进行新提交时,它们会更早地使用。是 ssh URL 中的 主机名 使 ssh 查看.ssh/config
,并且是 .ssh/config
控制 ssh 将发送哪些密钥。以上是关于错误:未找到存储库。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限并且 repo 存在的主要内容,如果未能解决你的问题,请参考以下文章
Heroku“权限被拒绝(公钥)致命:无法从远程存储库中读取”问题
GitLab:找不到您要查找的项目。致命:在 Jenkins 中构建时无法从远程存储库中读取
ssh:无法解析主机名 git:名称或服务未知 致命:无法从远程存储库读取