繁体   English   中英

ssh -vT git@github.com工作正常,代理位于github ssh密钥中。 问题出在哪里?

[英]`ssh -vT git@github.com` works fine, and agent is in github ssh keys. Where is the issue?

我刚买了一台新机器,正在开发一个新的github存储库。 我将其克隆到我的机器上

git clone git@github.com:<username>/<exact-repo-name>.git

它克隆很好:

Cloning into '<exact-repo-name>'...
remote: Counting objects: ###, done.
remote: Total ### (delta 0), reused 0 (delta 0), pack-reused ###
Receiving objects: 100% (###/###), ### KiB | 0 bytes/s, done.
Resolving deltas: 100% (###/###), done.
Checking connectivity... done.

并且,我通过执行for remote in git branch -r; do git checkout -b $remote; done本地添加所有远程分支: for remote in git branch -r; do git checkout -b $remote; done for remote in git branch -r; do git checkout -b $remote; done

然后,当我尝试从任何分支中拉出时,使用

git pull origin/<branch-name> 

我收到了一个非常常见的错误:

origin/<branch-name> does not appear to be a git repository
fatal: Could not read from remote repository.

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

因此,我完成了所有步骤:

ssh -vT git@github.com
ssh-add -l
eval "$(ssh-agent -s)"

这些都成功了,我检查了ssh-add -l的输出,发现它在我的github帐户的列表ssh项中。 我进入设置-> ssh键,在那里看到代理。

除了ssh ,还有某些用户权限吗?

我同意@Felix的观点,尽管这可能是伪装的,但这很可能不是SSH问题。 相反,我认为您的路径有问题。 您可以尝试像这样运行git clone

git clone https://username@github.com/username/exact-repo-name.git

这里的username是您的GitHub用户名。 Git会提示您输入密码,因此您不必以纯文本形式输入密码。 请阅读这篇SO文章以获取更多信息。

这可能不是ssh问题,因为ssh问题通常会导致显示如下消息

fatal: The remote end hung up unexpectedly

最有可能是路径问题:远程路径中有多余的斜线或空格(或者如果应该有空格,则命令行中缺少引号),或者大小写错误。 仔细检查URL的其余部分。 这也可能正是它所说的,是一个权限问题-您确定要以该存储库的正确用户身份进行连接吗?

编辑:从您添加的详细信息来看,您似乎只是弄混了pull命令的语法。 如果这样做,是否有效?:

git checkout <branch-name>
git pull # Edit: don't do this without reading all of 'git help pull'

另外, git fetch --all可行吗? git pull只是git fetch然后是git merge 。)

进一步编辑:我可以重现您的错误; 这是命令语法问题。 这里有更多示例:

“源”是本地文件夹中的git存储库; 我将其克隆到一个名为“ dest”的文件夹中:

$ git clone source dest
$ cd dest

现在,我在您的for循环中执行git branch命令:

$ git branch -r
  origin/HEAD -> origin/master
  origin/branch1
  origin/branch2
  origin/master

我希望第一行会引起问题,因为这将导致这些命令在for循环中运行:

git checkout -b "origin/HEAD"
git checkout -b "->"
...

(请注意,您的示例缺少`git branch -r`周围的反引号,因此,如果您发布的内容实际上是您正在运行的内容,则最终将得到名为“ git”,“ branch”和“ -r”的分支,这实际上不是您想要的...如果您难以将反引号放入内联代码块中,请参阅https://meta.stackexchange.com/questions/55437/how-can-the-backtick-character-be-包含在代码中

然后,如果我尝试使用pull命令,则会收到与您相同的错误:

$ git pull origin/branch1
fatal: 'origin/branch1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

这是因为git pull将远程存储库名称(origin)和远程分支名称(branch1)作为两个单独的参数,并用空格分隔。 所以这工作:

$ git pull origin branch1
From /tmp/source
 * branch            branch1    -> FETCH_HEAD
Already up-to-date.

但是,这可能并不是您想要的,因为您似乎想创建一堆本地分支以跟踪起源上的相同命名分支(例如,您想要一个名为“ branch1”的本地分支来跟踪“ origin / branch1”) 。 您的本地分支创建命令不包括设置跟踪,因此您实际得到的是一个名为“ origin / branch1”的本地分支和一个远程存储库“ origin”上的一个分支,也称为“ branch1”,即在运行您的for循环, git branch -a的输出是:

$ git branch -a
  master
  origin/HEAD
  origin/branch1
* origin/branch2
  origin/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branch1
  remotes/origin/branch2
  remotes/origin/master

...因此有两个分支称为“ origin / branch1”,唯一使它们与众不同的是,在一种情况下,存储库是您的本地分支,分支的字面全名是“ origin / branch1”,而在在另一种情况下,存储库是远程存储库(命名为origin),而分支的字面全名是“ branch1”,记为“ origin / branch1”-使用它可能会非常混乱(在某些命令中, git会抱怨说“ origin / branch1不明确”,您会遇到问题)。

还请注意,您的for循环创建的每个新分支实际上只是master的副本(或原始的任何默认/选定分支),因为您没有为它们指定从远程分支开始。 也就是说,在您的克隆命令中,您选择了一个分支(可能是主分支)来设置本地存储库。 然后,您为for循环中的每一行告诉git“从现在所在的位置创建新分支”,因此尽管这些新分支中的每一个都在远程上具有所有不同的名称,但它们都是对您选择的第一个分支的引用克隆。 这可能不是您想要的。

我认为您真正想要的是为每个远程分支运行的命令:

$ git checkout --track origin/branch1
Branch branch1 set up to track remote branch branch1 from origin.
Switched to a new branch 'branch1'

实际上,如果您刚刚进行了新的克隆,则git checkout branch1 [不带-b ]会产生与我相同的效果-由于没有名为branch1的本地分支,因此git会在您克隆的存储库中查找一个分支从并设置跟踪(如果找到)。

...所以我想这整个帖子可以归结为:

  • 在初始签出命令中-b
  • 在您的pull命令中使用空格而不是斜杠

:)

参见https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches ,而git help pull的输出可获取有关远程跟踪和拉git help pull的更多信息。 其中有些有些微妙(甚至比我提到的所有警告还多:))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM