我使用 --single-branch
选项克隆了我的 repo:
git clone -b FIRST git@<host>:repos/repo.git --single-branch
现在,正如预期的那样,我只配置了这个单一的上游。因此,以下命令将不起作用:
git branch --track SECOND origin/SECOND
如何添加、获取和 checkout 另一个现有的远程存储库?
最佳答案
由于您使用 --single-branch
选项克隆了存储库,因此它设置为仅跟踪远程上的此分支。
TL;DR :要完全撤消 --single-branch
,撤消其配置设置并重新获取
git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git fetch
在使用
--single-branch
设置的 repo 中,要从远程 fetch
另一个分支,您必须明确获取它。git fetch origin +refs/heads/<branch-name>:refs/remotes/origin/<branch-name>
或者,您可以通过将
<branch-name>
替换为 *
来获取所有远程分支。现在您应该能够查看新获取的分支。
git checkout <branch-name>
解释
我使用的 fetch 语法可以粗略地描述为
source:target
。使用它时,您是在用第一个路径描述提取的
source
,而用第二个路径确定 target
。这意味着您正在从
refs/heads/<branch>
获取远程分支并将结果写入 refs/remotes/origin/<branch>
。当然,可以将它写在不同的地方,例如通过使用 <branch>
只是一个本地分支(也可以根据需要选择名称)。此外,这解释了为什么
git push origin :<branch>
删除远程上的 <branch>
,因为您没有将任何内容推送到远程分支,从而有效地删除了它。注意 在编写
refs/heads/<branch>
时 refs/heads/
是完全可选的,如果你只是声明 <branch>
git 将查看 refs/heads/
。这不仅对获取有效,而且对所有分支引用有效。关于git - 如何添加、获取和 checkout 缺少的远程分支?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23779358/