使用深度为1选项克隆仓库后,如何检出新的远程分支?

5
在克隆一个仓库之后,origin 远程仓库添加了一个新的分支test,但我仍然看到:
$ 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 命令将新的远程分支引用带到我的存储库中?
我正在使用 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个回答

4

一个简单的 git fetch 应该就足够了。

这将把 origin/test 带到你的仓库中。

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


OP Gabriel Petrovay确认(在评论中)问题的来源:

git配置文件有轻微更改。

  • 在新克隆的repo中,[remote "origin"]fetch = +refs/heads/*:refs/remotes/origin/*
  • 但旧repo为fetch = +refs/heads/master:refs/remotes/origin/master

我觉得这可能是问题所在。

确实如此。

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

那应该解决了。


@GabrielPetrovay,git remote -v新克隆的仓库和您的原始仓库中返回的结果是否相同? - VonC
是的,它们是相同的:$ git remote -vorigin git@bitbucket.org:user/repo.git(获取)origin git@bitbucket.org:user/repo.git(推送) - Gabriel Petrovay
@GabrielPetrovay 在两个本地仓库中,git ls-remote 返回什么? - VonC
感谢 @VonC 帮我调试代码! - Gabriel Petrovay
@GabrielPetrovay 没问题,不用谢。我更喜欢使用 git config 命令来更改配置,而不是直接编辑 .gitconfig 文件。因此在我的回答中进行了编辑。 - VonC
显示剩余7条评论

2

找到问题所在了!!!

使用深度为1的git克隆:

git clone --depth 1 <repo>

您只需要主分支的引用,为此存储库生成的git仓库配置将是:

[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/*

这将导致获取所有远程引用失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接