【问题标题】:Git: git fetch <branch> ends in "xxx/xxx does not appear to be a git repository"Git: git fetch <branch> 以“xxx/xxx 似乎不是 git 存储库”结尾
【发布时间】:2020-08-18 14:17:09
【问题描述】:

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

如果我做 git branch -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.

我是 repo 的所有者,我拥有它的权利,如果我这样做:

git remote -v

输出是:

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

所以'origin'指向它必须去的地方。

此时我无法获取一个特定的分支(还没有尝试 fetch --all)

以防万一:

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

【问题讨论】:

    标签: git github branch git-fetch


    【解决方案1】:

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

    • git fetch:调用 default 远程(通常是 origin)并获取所有内容
    • git fetch <em>remote</em>:调用named遥控器。通常你必须在这里使用origin
    • git fetch <em>remote</em> <em>branch1 ... branchN</em>:调用named遥控器,当它列出它的分支时,只选择特定的named分支。

    您尝试使用这三种形式中的最后一种,但却犯了两个不同的错误:

    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,使用 git pushgit fetchgit pull(运行 git fetch)时,您才真正需要记住这一点:

    • 使用 git push,您的 Git 会要求他们的 Git 设置他们的 branch 名称之一。您将根据需要向他们发送一些提交,然后您的 Git 会询问他们:如果可以,请将 ______(分支名称)设置为 ______(提交哈希 ID)。(使用 @ 987654348@把这个礼貌的请求变成了命令。)

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

    • git pull 运行 git fetch,所以它的作用与 git fetch 相同。 (git fetch 成功完成后,git pull 运行第二个 Git 命令,通常是 git merge。我通常建议避免 git pull,直到你真正了解git fetch /em> 第二个 Git 命令起作用,因为每个步骤本身就足够令人困惑,但这是您应该自己做出的个人选择。)

    一边

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

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

    (高级 Git 用户的规则是不要使用它。等等,不,这是 optimization 的规则。?)

    【讨论】:

    • @torek 的解释非常好。我非常感谢你的努力和帮助。我会尽快穿上这个,我会更仔细地再次阅读您的答案并按照您的指示进行操作,当然我会通知您并且很可能会将您的答案标记为正确。再次感谢您在 git fetch 上的“大师班”:)
    猜你喜欢
    • 2015-07-01
    • 2021-07-28
    • 2017-01-26
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2020-09-14
    • 2013-03-04
    相关资源
    最近更新 更多