克隆深度1选项时git checkout new remote branch

时间:2014-04-30 11:36:15

标签: git branch git-clone git-remote

在我复制了一个repo后,新的分支test已添加到origin遥控器中。但我仍然看到:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

我应该使用什么git命令来获得以下输出:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/test

git checkout remote branch问题不是我的问题,因为在我看到所有远程分支引用之后就会发生这种情况。

我无法再次克隆回购,因为我在其中进行了本地更改/提交。

那么,如何使用git命令将新的远程分支引用引入我的repo?

我正在使用具有以下分支的BitBucket仓库:branches


试验

git fetch不起作用:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git fetch
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git fetch origin 
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

2 个答案:

答案 0 :(得分:3)

发现问题!!!

深度为1的git克隆:

git clone --depth 1 <repo>

只需要master分支引用,为此repo生成的git repote config将是:

[remote "origin"]                                                                                                
   url = git@bitbucket.org:jillix/cctool.git
   fetch = +refs/heads/master:refs/remotes/origin/master

而不是:

[remote "origin"]                                                                                                
   url = git@bitbucket.org:jillix/cctool.git
   fetch = +refs/heads/*:refs/remotes/origin/*

这将使获取失败带来所有远程引用。

答案 1 :(得分:2)

简单的git fetch就足够了。

这会将原产地/测试带到你的回购中。

然后git checkout -b test origin/test将在本地声明该分支。


OP Gabriel Petrovay确认(in the comments)问题的根源:

  

git配置文件略有变化。

     
      
  • 在新克隆的回购邮件[remote "origin"]中有fetch = +refs/heads/*:refs/remotes/origin/*
  •   
  • 但旧回购邮件有fetch = +refs/heads/master:refs/remotes/origin/master
  •   
     

我觉得这是个问题。

确实如此。

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"

那应该解决它。