如何在git中浅层克隆一个分支?

All*_*ner 10 git

我有一个git repo我想做一个浅拷贝,只拉一个分支.

这个SO问题说git clone默认拉动所有远程分支.我想做一个只有一个分支的浅表副本.

我这样做是为了部署到生产中.完整的结账超过400MB,但头部的git存档只有16MB.似乎克隆下拉所有分支的行为导致我的下载比必要的大得多.

Von*_*onC 5

雅库布(Jakub)已经提到,可以对选定的分支进行浅表克隆,但要做的工作相当复杂。
他补充说:

但是请注意,由于分支通常共享大部分历史记录,因此仅克隆分支的子集所获得的收益可能会比您想象的要小。

我要补充一点,您在生产平台中不应该有任何VCS工具(您只能安装/监视生产运行所需的东西)。
因此,git archive仍然是提取所需内容的最佳方法,将其作为归档文件(ziptar,一旦在生产端传输,就可以在没有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来更正此问题。

Builtin / clone.c:正确检测从标签开始的克隆

31b808aclone --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年第四季度)中的链接标签