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

时间:2011-02-08 04:51:47

标签: git

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

This SO question表示git clone默认拉取所有远程分支。我想做一个只有一个分支的浅层副本。

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

3 个答案:

答案 0 :(得分:5)

Jakub已经提到了shallow clone of selected branches is possible,但要做的很复杂 他补充说:

  

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

我想补充一点,您不应该在生产平台中使用任何VCS工具(您只需安装/监控生产所需的内容运行)。 因此,git archive仍然是提取所需内容的最佳方式,作为归档(ziptar格式,您可以在没有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,而不是纠正此问题。

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

  

31b808aclone --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
相关问题