138

克隆远程存储库后,它不会通过 -a 选项显示任何远程分支。可能是什么问题呢?如何调试它?在此代码段中,未显示两个远程分支:

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git --version
git version 1.8.3.1

在另一台机器上尝试了相同的命令,它运行良好:

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/debian
  remotes/origin/master
  remotes/origin/python_codegen
$ git --version
git version 1.7.1

还尝试克隆另一个仓库,效果很好。虽然我可以在这台机器上再试一次,但最好知道哪里出了问题。

任何建议或提示都将受到欢迎。

编辑:答案摘要:由于 git 版本 1.8.3.2 需要一起使用“--depth”和“--no-single-branch”以获得与以前相同的行为。这被认为是一个错误修复。

4

3 回答 3

291

进行浅克隆后,能够从远程签出其他分支

  1. 运行(感谢@jthill):

    git remote set-branches origin '*'
    
  2. 之后,做一个git fetch -v

  3. 最后git checkout the-branch-i-ve-been-looking-for


步骤 1 也可以通过编辑手动完成.git/config

例如,将以下行从:

fetch = +refs/heads/master:refs/remotes/origin/master

到(替换master*):

fetch = +refs/heads/*:refs/remotes/origin/*
于 2014-12-10T04:54:00.133 回答
88

通过阅读来自@jthill 的回复和评论,最适合我的是使用命令set-branches上的选项git remote

$ git clone --depth 1 https://github.com/dogescript/dogescript.git
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name

这将更改命名远程跟踪的分支列表,以便我们可以仅获取和签出所需的分支。

于 2016-06-02T13:43:46.020 回答
67

行为是正确的,在最后一次修订之后,主分支是(因为这是主远程的 HEAD)存储库中唯一的远程分支:

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

完整克隆提供新的(所有)分支:

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

浅克隆

由于技术文档中的浅薄描述git-clone --depth 20 repo,“ [...] 导致 [s in] 提交链的长度最多为 20。” 因此,浅克隆应该包含请求的提交深度,从分支的尖端开始。

此外,-option 的文档git clone描述了--single-branch

“仅克隆导致单个分支尖端的历史记录,由--branch选项或主分支远程HEAD点指定。当使用该选项创建浅层克隆时--depth,这是默认设置,除非--no-single-branch给出获取附近的历史记录所有分支的提示。

因此,浅克隆带有depth选项)仅获取一个分支(在您请求的深度)。


不幸的是,这两个选项 (--depth--single-branch) 在过去都存在错误,并且使用浅克隆隐含了未解决的问题(正如您可以在我上面发布的链接中阅读的那样),这是由给定的历史重写引起的。在特殊情况下,这总体上会导致一些复杂的行为。

于 2014-05-17T11:01:44.817 回答