git浅克隆(克隆

克隆远程存储库后,它不会通过-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”以获得与以前相同的行为。 这被认为是一个错误修复。


行为是正确的,在最后一次修订后,master-branch(因为这是主要远程的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”。 因此浅层克隆应该包含来自分支尖端的所请求的提交深度。

另外,-- --single-branch -option的git clone的文档描述如下:

“只克隆通过--branch选项或主分支远程的HEAD指定的--branch单个分支尖端的历史记录。 使用--depth选项创建浅表复制时,这是默认设置,除非--no-single-branch给予所有分支的提示附近的历史。

因此,一个浅克隆 深度 -选项)只只获取 一个单一的分支 (以您所要求的深度)。


不幸的是,两个选项( --depth--single-branch )在过去都存在问题,并且使用浅层克隆会引发未解决的问题(正如您可以在上面发布的链接中看到的那样)改写。 这在特殊情况下总体上导致有些复杂的行为。


在完成浅层克隆后,为了能够从远程检出其他分支

  • 我从.git/config编辑文件:

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

    并将其更改为

    fetch = +refs/heads/*:refs/remotes/origin/*
    
  • 之后,我做了一个git fetch -v

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

  • 更新:

    也可以通过在评论中使用@ jthill的解决方案,

    git remote set-branches origin '*'
    

    将具有与步骤1相同的效果。 之后,继续步骤2和3。


    从阅读回复和来自@jthill的评论,最适合我的东西是使用git remote命令中的set-branches选项:

    $ 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
    

    这改变了命名远程跟踪的分支列表,以便我们可以获取并检出所需的分支。

    链接地址: http://www.djcxy.com/p/4449.html

    上一篇: git shallow clone (clone

    下一篇: How to push 2 branches from local to remote repo in git?