git shallow clone (clone --depth) misses remote branches
克隆远程存储库后,它不会显示任何远程分支by-a选项。有什么问题?如何调试它?在这段代码中,没有显示两个远程分支:
1 2 3 4 5 6 7 8 | $ 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 |
在另一台机器上尝试了相同的命令,它运行良好:
1 2 3 4 5 6 7 8 9 10 11 | $ 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 |
号
还克隆了另一个repo,效果很好。虽然我可以在这台机器上再试一次,但最好知道出了什么问题。
任何建议或提示都将非常受欢迎。
编辑:回答总结:由于Git版本1.8.3.2,"深度"和"——没有单个分支"需要一起使用才能获得与以前相同的行为。这被认为是错误修复。
在做了一个浅克隆之后,为了能够从远程签出其他分支,
跑步(谢谢@jthill):
1 | git remote set-branches origin '*' |
之后,做一个
最后是
步骤1也可以通过编辑
例如,将以下行更改为:
1 | fetch = +refs/heads/master:refs/remotes/origin/master |
。
(用
1 | fetch = +refs/heads/*:refs/remotes/origin/* |
行为正确,在最后一次修订之后,主分支(因为这是主远程的头)是存储库中唯一的远程分支:
1 2 3 4 | florianb$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master |
完整克隆提供了新的(所有)分支:
1 2 3 4 5 6 | florianb$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/debian remotes/origin/master remotes/origin/python_codegen |
号浅无性系
由于技术文档中的描述较浅,"
此外,
"Clone only the history leading to the tip of a single branch, either specified by the
--branch option or the primary branch remote'sHEAD points at. When creating a shallow clone with the--depth option, this is the default, unless--no-single-branch is given to fetch the histories near the tips of all branches."
号
因此,一个浅克隆(带有深度选项)只获取一个分支(在您请求的深度)。
不幸的是,这两个选项(
通过阅读@jthill的回复和评论,对我来说最有用的是在
1 2 3 4 | $ 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 |
。
这将更改指定远程跟踪的分支列表,以便我们只获取和签出所需的分支。