我有一个git repo我想做一个浅拷贝,只拉一个分支。
This SO question表示git clone默认拉取所有远程分支。我想做一个只有一个分支的浅层副本。
我这样做是为了部署到生产中。完整的结账超过400MB,但头部的git存档只有16MB。似乎克隆下拉所有分支的行为导致我的下载比必要的大得多。
答案 0 :(得分:5)
Jakub已经提到了shallow clone of selected branches is possible,但要做的很复杂 他补充说:
但请注意,由于分支通常共享其大部分历史记录,因此仅克隆分支子集的收益可能比您想象的要小。
我想补充一点,您不应该在生产平台中使用任何VCS工具(您只需安装/监控生产所需的内容运行)。
因此,git archive
仍然是提取所需内容的最佳方式,作为归档(zip
或tar
格式,您可以在没有Git的情况下使用该格式,一旦在生产方面转移)< / p>
2012年3月更新:
upcoming git1.7.10(2012年4月)实际上只允许克隆一个分支:
git clone --single-branch
您可以在t5500-fetch-pack.sh
中看到它:
test_expect_success 'single branch clone' '
git clone --single-branch "file://$(pwd)/." singlebranch
'
然后修复了该功能:
clone --single
:将获取refspec限制为获取分支运行“
git clone --single
”后,生成的存储库安装了通常的默认“+refs/heads/*:refs/remotes/origin/*
”通配符提取refspec,这意味着后续的“git fetch
”将最终获取所有其他分支。更新fetch refspec以仅覆盖单个克隆的ref,而不是纠正此问题。
gitster
),Git 2。2。2,2014年7月)31b808a(
clone --single
:将获取refspec限制为获取的分支,2012-09-20)尝试通过检查查看给定的“分支”是否实际上是远程存储库中的标记使用“refs/tags/
”但却错误地使用了strstr(3)
;处理“分支”“refs/heads/refs/tags/foo
”并使用“refs/tags/
”的逻辑是错误的。 ref层次结构 代码真正想要做的是查看它是否以“refs/tags/
”开头。
2016年9月更新:Git 2.11 +中的git clone --single-branch --branch tag
will work for chained tags(2016年第4季度)。
答案 1 :(得分:0)
您可以简单地执行正常(浅)克隆,然后在本地删除多余的分支(以及跟踪远程分支)。您仍将拥有所有网络流量,但稍后您的磁盘空间会更小。
答案 2 :(得分:0)
最近的git版本(我有v2.7.3)通过调用只支持一个分支的shallow cloning:
join