为什么不能 Git 设置这个分支的上游?

why can't Git set the upstream for this branch?

情况如下:

$ git branch --all -vv
* feature/crvc11-93-add-pec                93fe8bc ...
  release/19.3.0-cv011                     4012d42 [origin/release/19.3.0-cv011] ...
  remotes/origin/feature/crvc11-93-add-pec 93fe8bc ...
  remotes/origin/release/19.3.0-cv011      4012d42 ...

我不知道为什么feature/crvc11-93-add-pec我检查的时候没有跟踪remote-tracking分支origin/feature/crvc11-93-add-pec,现在我想手动添加它作为上游:

$ git branch --set-upstream-to origin/feature/crvc11-93-add-pec
fatal: Cannot setup tracking information; starting point 'origin/feature/crvc11-93-add-pec' is not a branch.

这里的Git是什么意思?是的,它一个分支,它是远程跟踪分支。如果我删除 origin 前缀,那么我们会得到

$ git branch --set-upstream-to feature/crvc11-93-add-pec
warning: Not setting branch feature/crvc11-93-add-pec as its own upstream.

如何制作 feature/crvc11-93-add-pec 曲目 origin/feature/crvc11-93-add-pec?它们是相同的提交,这应该可以正常工作。我没有正确“拼写”分支名称吗?插入 = 似乎没有任何区别。


更多信息 我怀疑这个问题与浅深度 1 单分支克隆 (release/19.3.0-cv011) 有关。我认为当你这样做时,有关于获取和远程跟踪分支的特殊规则。 .git/config 包含此行:

fetch = +refs/heads/release/19.3.0-cv011:refs/remotes/origin/release/19.3.0-cv011

...我觉得这在某种程度上改变了整个游戏。如果是这样,那就太不幸了,因为我真的不希望整个历史记录在我的计算机上占据 space。

您需要将浅单分支克隆变成浅分支克隆。 :-)

更准确地说,使用 git remote set-branches --add 添加另一个 跟踪名称 。这不会影响任何深度设置(必须在以后的 git fetch 操作中重复,因为它们没有存储在任何地方)但是 确实 改变了 fetch 设置你在您的 更多信息 部分引用。您添加的每个分支都会再添加一个 fetch = +refs/heads/<em>name</em>:refs/remotes/<em>remote</em>/<em>名称</em>行。这些行指示您的 Git 创建或更新相应的远程跟踪名称,以便您现在可以将该名称传递给 git branch --set-upstream-to

添加要跟踪的其他分支后,您需要 运行 git fetch,并且您可能希望使用较小的 --depth 值来执行此操作(也许又是 1 个)。你可能会得到更好的整体结果(更好的 git fetch 压缩和打包文件等) 在未来 如果你的深度足以让所有提交子图片段加入向上。这也将为您提供足够的信息,以便在图表的该区域进行正常的 Git 操作。到底要走多深(git fetch--deepen--depth)是不可能从“你这边”计算的,直到你足够深,所以一个常见的技术1 是一次添加 50 或 100 个提交,直到你“足够深”。


1理想情况下我们会让对方为我们计算这个,但它不会。

如果获取是免费的,一次将每个子图加深一个提交级别可能是可行的方法,但获取不是免费的,因此我们需要分摊获取成本与超额数据的携带成本——a非常标准的图优化问题!