当前位置: 首页 > 知识库问答 >
问题:

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

蒯坚白
2023-03-14

昨天我创建了一个ssh密钥并为工作克隆了一个存储库。在进行了一些更改后,我尝试推送提交:

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.

我看过这个活跃的SO帖子。我的问题依然存在。我不知道如何追踪这个问题,所以将分享我认为相关的一切。

我的笔记本电脑上有个人和工作Rest室。我的工作生活在~/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.上关注了这篇文章

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

然后,我将本教程中的密钥添加到我的工作github设置中。

到目前为止,我认为我已经把一切都设置好了?但是当我尝试从这个回购中推送时:

~/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,并试图从fresh中克隆:

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

关于回购本身,如果我进入回购设置

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

共有1个答案

洪季萌
2023-03-14

首先,简单介绍一下背景:在您使用的URL中:

git clone git@github.com:...

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

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

(使用完全相同的文本其余部分代替)具有完全相同的效果。

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

ssh -T git@github.com

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

现在,运行ssh-Tgit@github.com后,您可能会得到一个权限被拒绝的错误,这意味着您在github.com尝试的密钥都不起作用,或者您可能会得到这种输出:

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

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

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

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

ssh -Tv git@github.com

这会产生大量输出,所有输出都以< code>debug1为前缀。这里可能会有一些线索,告诉我们到底出了什么问题。如果没有,我们可以使用< code>ssh -Tvv或< code>ssh -Tvvv来获得更多的调试输出,前缀为< code>debug2和< code>debug3。在查看所有这些输出时,通常的怀疑是确保ssh查看的是正确的< code >。ssh/*文件,其中存储了您的ssh密钥。确保:

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

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

由于邪恶的间谍闯入了MI-5记录,我们已经泄露了M和Q的密钥,现在我们希望将我们的特洛伊木马插入系统,以便我们可以尝试对詹姆斯·邦德进行过分精心的杀戮。但那是以后的事:现在,我们以M的身份进入,但我们需要以Q的身份进入。我们该怎么办?

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

我们需要先让我们的 ssh 尝试我们的 Q 键。我们可以删除M的密钥,但这很烦人:现在我们可以种植特洛伊木马,但我们找不到邦德的当前分配,只有M才能读取。我们想要的是一种选择我们将要尝试的密钥的方法。

这就是。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

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

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

您遇到了另一个问题:

  • 旧版本的Windows没有或没有足够的ssh。
  • 所以Git-for-Windows捆绑了一个ssh(就像它捆绑了bash的一个版本一样:git-bash并不是Git的一部分,它只需要使用Git,捆绑的ssh也不是Git的一部分,它只需要使用Git)。
  • 但是捆绑的ssh和系统ssh是使用不同配置文件的不同版本。

如果系统ssh工作正常,告诉Git使用系统ssh,例如< code > Git config-global core . ssh command ssh 。如果不够,就使用捆绑的ssh(但是上面的测试是如何进行的呢?).

 类似资料:
  • 我在窗户上用乌龟。当我试图从标准Windows资源管理器的上下文菜单中克隆时,出现以下错误: 请确保您有正确的访问权限和存储库存在 更准确地说,终端的快照如下: 吉特。exe克隆--进度-v“git@arobotdev:\git\AlfaRobot.git“C:\Work\AlfaRobot” 克隆到“C:\Work\AlfaRobot” 权限被拒绝,请重试 权限被拒绝,请重试 权限被拒绝(公钥、

  • 我正试着和git建立联系http://danielmiessler.com/study/git/#website来管理我的网站。 我已经完成了说明中的最后一步:git推送网站master:refs/heads/master 我正在使用win7中的git ming32命令行 这里的一个问题可能是程序正在寻找Bill@***. com。当我通过ssh连接到我的网站时,我有一个不同的用户名(让我们说“a

  • 我已经找了很多个小时,寻找一个解决我这个看似容易解决的问题的方法。不是我的搜索没有结果,而是我的搜索找到了这么多不同的解决方案--没有一个有效。 ‘权限被拒绝(公开密钥)。致命:无法从远程存储库读取。‘ 我已经试过(并且再三试过)用许多不同的方法来修复它。正如我所说的,在过去的两天里,我花了很大一部分时间四处寻找答案。以下是我尝试过的一些事情: heroku键:清除后跟heroku键:添加 使用'

  • 我有两个公共存储库:和: 当我尝试从公共存储库peterI获取最新代码时,出现以下错误: 存储库肯定存在:。我需要配置哪些访问权限?也许是关于权限的?谢谢。 更新1。我尝试了特雷弗·特雷西在他的回答中提出的建议,但没有成功: 更新2。我去看了文件. git\config,这是我在该文件末尾看到的: 公共存储库ssh://manuelM@示例。net/~ peterI/public\u html/p

  • 我有本地工作副本的SourceTree。所有操作都很好,我可以通过SourceTree进行简单的提取、推拉等操作。我只需要做一个在SourceTree中不存在的力推。 我打开终端做git推-f 我不确定什么是问题。