Git:git 获取 <branch> 结束于 "xxx/xxx does not appear to be a git repository"
Git: git fetch <branch> ends in "xxx/xxx does not appear to be a git repository"
我在从我的远程仓库中获取一个特定分支时遇到问题。
如果我做 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.
我是回购协议的所有者,我拥有它的权利,如果我这样做:
git remote -v
输出为:
origin https://xxxm@xxx.org/xxxxx/xxxxxxx.git (fetch)
origin https://xxx@xxx.org/xxxxx/xxxxxxx.git (push)
所以 'origin' 指向它必须指向的地方。
此时我无法获取一个特定的分支(还没有尝试获取 --all)
以防万一添加一些内容:
不确定这可能与它有关,但以防万一,如果它有任何帮助,我可以补充一点,我昨天错误地推送了两个非常大的文件,然后在 [=45] 之后将它们都删除了=] 说明 (https://rtyley.github.io/bfg-repo-cleaner/)。它们很容易跟踪,我不需要的大文件从本地和 remote/history.
中消失了
git fetch
命令接受零个、一个或两个或更多个参数:
git fetch
:调用默认远程(通常origin
)并获取所有内容
git fetch <em>remote</em>
: 调用named 遥控器。通常你必须在这里使用origin
。
git fetch <em>remote</em> <em>branch1 ... branchN</em>
:调用named 远程,当它列出其分支时,仅选择特定的 named 分支。
您正在尝试使用这三种形式中的最后一种,但犯了两个不同的错误:
- 您必须提供遥控器的名称,在本例中为
origin
。
- 你的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
部分——不是分支名称(master
, release/2.0.23175_BBDDv10
) 并且不是 远程跟踪 名称 (origin/master
, origin/release/2.0.23175_BBDDv10
)。这是第三种名称,远程名称。
- Branch 名称,如
master
和 release/2.0.23175_BBDDv10
对每个存储库都是私有的,您可以 查看 他们的名称git fetch
但您的 git fetch
重命名了 它们,使您的 远程跟踪名称 类似于 origin/release/2.0.23175_BBDDv10
.
所以你总是要记得问,当你有一个分支名称时,谁的分支名称:你的,还是他们的?好吧,只有当您 连接 两个 Git 时,您才真正需要记住这一点,使用 git push
、git fetch
或 git pull
(运行 git fetch
):
使用 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 pull
直到你真正理解 git fetch
和 第二个 Git 命令是如何工作的,因为每个步骤本身就足够令人困惑,但这是你的个人选择应该自己做。)
放在一边
这里有一条适用于大多数 Git 用户的简单规则:永远不要使用 git fetch --all
。
(它没有打破任何东西,但它并不代表人们认为的意思。)
(高级Git用户的规则是还没有使用它。等等,不,这是optimization的规则。)
我在从我的远程仓库中获取一个特定分支时遇到问题。
如果我做 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.
我是回购协议的所有者,我拥有它的权利,如果我这样做:
git remote -v
输出为:
origin https://xxxm@xxx.org/xxxxx/xxxxxxx.git (fetch)
origin https://xxx@xxx.org/xxxxx/xxxxxxx.git (push)
所以 'origin' 指向它必须指向的地方。
此时我无法获取一个特定的分支(还没有尝试获取 --all)
以防万一添加一些内容:
不确定这可能与它有关,但以防万一,如果它有任何帮助,我可以补充一点,我昨天错误地推送了两个非常大的文件,然后在 [=45] 之后将它们都删除了=] 说明 (https://rtyley.github.io/bfg-repo-cleaner/)。它们很容易跟踪,我不需要的大文件从本地和 remote/history.
中消失了git fetch
命令接受零个、一个或两个或更多个参数:
git fetch
:调用默认远程(通常origin
)并获取所有内容git fetch <em>remote</em>
: 调用named 遥控器。通常你必须在这里使用origin
。git fetch <em>remote</em> <em>branch1 ... branchN</em>
:调用named 远程,当它列出其分支时,仅选择特定的 named 分支。
您正在尝试使用这三种形式中的最后一种,但犯了两个不同的错误:
- 您必须提供遥控器的名称,在本例中为
origin
。 - 你的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
部分——不是分支名称(master
,release/2.0.23175_BBDDv10
) 并且不是 远程跟踪 名称 (origin/master
,origin/release/2.0.23175_BBDDv10
)。这是第三种名称,远程名称。 - Branch 名称,如
master
和release/2.0.23175_BBDDv10
对每个存储库都是私有的,您可以 查看 他们的名称git fetch
但您的git fetch
重命名了 它们,使您的 远程跟踪名称 类似于origin/release/2.0.23175_BBDDv10
.
所以你总是要记得问,当你有一个分支名称时,谁的分支名称:你的,还是他们的?好吧,只有当您 连接 两个 Git 时,您才真正需要记住这一点,使用 git push
、git fetch
或 git pull
(运行 git fetch
):
使用
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 pull
直到你真正理解git fetch
和 第二个 Git 命令是如何工作的,因为每个步骤本身就足够令人困惑,但这是你的个人选择应该自己做。)
放在一边
这里有一条适用于大多数 Git 用户的简单规则:永远不要使用 git fetch --all
。
(它没有打破任何东西,但它并不代表人们认为的意思。)
(高级Git用户的规则是还没有使用它。等等,不,这是optimization的规则。)