当使用--single-branch时,为什么Git无法解析远程分支? [英] Why can't Git resolve remote branches when --single-branch is used?

查看:555
本文介绍了当使用--single-branch时,为什么Git无法解析远程分支?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我们经常通过--single-branch有效克隆来优化克隆.但是,我们以后将无法再获得其他分支.有和没有-单分支的git克隆之间有什么区别?以后如何获取其他分支?

So, we frequently optimize clones by effectively cloning with --single-branch. However, we are then unable to get additional branches later. What is the difference, plumbing-wise, between a git clone with and without --single-branch? How can we fetch down additional branches later?

标准克隆:

$ git clone -b branch-name https://repo.url standard
$ cd standard
$ git checkout remote-branch
Branch 'remote-branch' set up to track remote branch 'remote-branch' from 'origin'.
Switched to a new branch 'remote-branch'

单分支克隆:

$ git clone -b branch-name --single-branch https://repo.url singlebranch
$ cd singlebranch
$ git checkout remote-branch
error: pathspec 'remote-branch' did not match any file(s) known to git

更新

根据下面@AndrewMarshall提供的答案,您需要更新配置中的默认获取refspec.即使您可以绕过提取操作来删除正确的提交,但是如果您不首先修改配置,尝试进行检出操作将绝对拒绝了解有关该分支的任何信息:

Per the answer from @AndrewMarshall, below, you need to update the default fetch refspec in the config. Even though you can hack your way around the fetch to pull down the right commits, your attempted checkout will absolutely deny knowing anything about that branch if you don't fix your config first:

$ git fetch origin +refs/heads/remote-branch:refs/remotes/origin/remote-branch
From https://gerrit.magicleap.com/a/platform/mlmanifest
 * [new branch]      remote-branch -> origin/remote-branch

$ git checkout remote-branch 
error: pathspec 'remote-branch' did not match any file(s) known to git

$ git remote set-branches origin --add remote-branch
$ git checkout remote-branch 
Branch 'remote-branch' set up to track remote branch 'remote-branch' from 'origin'.
Switched to a new branch 'remote-branch'

请注意,我们先获取它,然后重新配置,然后然后检出.提取操作可​​以按任何顺序进行(尽管如果不在配置中,则必须传递参数),但结帐由配置选通.

Notice we fetch it, then reconfigure, then checkout. The fetch can happen in any order (though you have to pass parameters if not in the config) but the checkout is gated by the config.

推荐答案

--single-branch的工作方式是将遥控器的fetch属性设置为仅一个分支名称,而不是全局名称:

--single-branch works by setting the remote’s fetch property to only be the single branch name, instead of a glob:

$ git config --get-all remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

因此,我们添加一个带有 :

So let’s add an entry with git remote set-branches:

$ git remote set-branches origin --add other-branch
$ git config --get-all remote.origin.fetch    
+refs/heads/master:refs/remotes/origin/master
+refs/heads/other-branch:refs/remotes/origin/other-branch

$ git fetch
From origin
 * [new branch]      other-branch        -> origin/other-branch

$ git checkout other-branch
Branch 'other-branch' set up to track remote branch 'other-branch' from 'origin'.
Switched to a new branch 'other-branch'

或者,也可以将其设为全局,以便提取所有分支(默认的非单分支行为):

Or, alternatively, make it a glob so all branches may be fetched (the default, non-single-branch behavior):

git remote set-branches origin '*'

这篇关于当使用--single-branch时,为什么Git无法解析远程分支?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆