Git:git fetch <branch> 以 "xxx/xxx does not appear to be a git repository" 结尾



我在从远程存储库获取一个特定分支时遇到问题。

如果我做 git分支 -a,输出是:

* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/release/2.0.23175_BBDDv10
...

没关系,我所有的分支机构都在远程,但只要我这样做

git fetch origin/release/2.0.23175_BBDDv10

我收到:

fatal: 'origin/release/2.0.23175_BBDDv10' 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.

我是存储库的所有者,我对其拥有权利,如果我这样做:

git remote -v

输出为:

origin  https://xxxm@xxx.org/xxxxx/xxxxxxx.git (fetch)
origin  https://xxx@xxx.org/xxxxx/xxxxxxx.git (push)

所以"起源"指向它必须去的地方。

在这一点上,我坚持能够获取一个特定的分支(尚未尝试获取 - 所有分支)

要添加一些以防万一的内容:

不确定这可能与它有关,但以防万一,如果它有任何帮助,我可以补充一点,我昨天错误地推送了两个非常大的文件,然后按照"BFG Repo Cleaner"说明(https://rtyley.github.io/bfg-repo-cleaner/)将它们都删除了。它们很容易遵循,我的大不需要的文件从本地和远程/历史记录中消失了。

git fetch命令接受零个、一个或两个或多个参数:

  • git fetch:调用默认遥控器(通常origin)并获取所有内容
  • git fetchremote:调用指定的遥控器。 通常您必须在此处使用origin
  • git fetchremotebranch1 ... branchN:调用命名的远程,当它列出其分支时,只选择特定的命名分支。

您正在尝试使用这三种形式中的最后一种,但犯了两个单独的错误:

  1. 您必须提供远程数据库的名称,在本例中为origin
  2. Git中的origin/*名称是 Git 重命名Git 分支名称的结果,因此它们不会与您自己的分支名称冲突。

因此,您想要的是:

git fetch origin release/2.0.23175_BBDDv10

它会调用他们的 Git,询问他们的release/2.0.23175_BBDDv10分支,并更新您的origin/release/2.0.23175_BBDDv10名称。

如果您觉得这令人困惑,请放心,这是令人困惑

的关于斜杠去哪里以及何时去的整个事情令人困惑,直到您意识到两件事:

  • 第三个词——普通origin部分——不是分支名称(masterrelease/2.0.23175_BBDDv10),也不是远程跟踪名称(origin/masterorigin/release/2.0.23175_BBDDv10)。 这是第三种名字,一个遥远的名字。
  • masterrelease/2.0.23175_BBDDv10分支名称是每个存储库专用的,您可以使用git fetch查看它们的分支名称,但您的git fetch重命名它们以使您的远程跟踪名称origin/release/2.0.23175_BBDDv10.

所以你总是要记得问,当你有一个分支名称时,它是谁的分支名称:你的,还是他们的? 好吧,当你git pushgit fetchgit pull(运行git fetch)连接两个 Git 时,你只需要记住这一点:

  • 使用git push,您将让您的 Git 要求他们的 Git 设置他们的分支名称之一。 你会根据需要向他们发送一些提交,然后你的 Git 会问他们:如果可以的话,请将 ______(分支名称)设置为 ______(提交哈希 ID)。(使用git push --force将此礼貌请求转换为命令。

  • 使用git fetch,您将让他们的 Git 查看他们的分支名称,将他们中的任何新提交获取到您自己的 Git 中,然后更新您的远程跟踪(origin/*)名称。

  • git pull运行git fetch,所以它与git fetch相同。 (git fetch成功完成后,git pull运行第二个 Git 命令,通常git merge。 我通常建议在你真正了解git fetch第二个 Git 命令的工作原理之前避免git pull,因为每个步骤本身都足够混乱,但这是你应该自己做出的个人选择。

旁白

对于大多数 Git 用户来说,这里有一个简单的规则:永远不要使用git fetch --all

(它不会破坏任何东西,但这并不意味着人们认为它意味着什么。

(高级 Git 用户的规则是暂时不要使用它。 等等,不,这是优化的规则。 )

相关内容

最新更新