我有一个git repo我想做一个浅拷贝,只拉一个分支.
这个SO问题说git clone默认拉动所有远程分支.我想做一个只有一个分支的浅表副本.
我这样做是为了部署到生产中.完整的结账超过400MB,但头部的git存档只有16MB.似乎克隆下拉所有分支的行为导致我的下载比必要的大得多.
雅库布(Jakub)已经提到,可以对选定的分支进行浅表克隆,但要做的工作相当复杂。
他补充说:
但是请注意,由于分支通常共享大部分历史记录,因此仅克隆分支的子集所获得的收益可能会比您想象的要小。
我要补充一点,您在生产平台中不应该有任何VCS工具(您只能安装/监视生产运行所需的东西)。
因此,git archive仍然是提取所需内容的最佳方法,将其作为归档文件(zip或tar,一旦在生产端传输,就可以在没有Git的情况下使用的格式)
2012年3月更新:
在即将到来的git1.7.10(2012年4月),实际上将让你克隆只有一个分支:
git clone --single-branch
Run Code Online (Sandbox Code Playgroud)
您可以在中看到它t5500-fetch-pack.sh:
test_expect_success 'single branch clone' '
git clone --single-branch "file://$(pwd)/." singlebranch
'
Run Code Online (Sandbox Code Playgroud)
然后该功能已修复:
clone --single:将获取refspec限制为获取的分支运行“
git clone --single”之后,生成的存储库将安装通常的默认+refs/heads/*:refs/remotes/origin/*通配符获取refspec,这意味着后续的“git fetch”将最终获取所有其他分支。更新fetch refspec使其仅覆盖单个克隆的ref来更正此问题。
gitsterHamano(),Git 2.0.2,2014年7月)31b808a(
clone --single:将获取refspec限制为fetched分支,2012-09-20)试图通过检查“refs/tags/” 来查看要遵循的给定“ branch”是否实际上是远程存储库中的标签,但使用不正确strstr(3);对待“分支refs/heads/refs/tags/foo”和将逻辑用于refs/tags/ref层次结构是错误的。
该代码真正想要做的是查看它是否以“refs/tags/” 开头。
2016年9月更新:git clone --single-branch --branch tag适用于Git 2.11+(2016年第四季度)中的链接标签。