使用Git克隆时仅选择文件夹的子集

时间:2012-11-14 09:37:27

标签: git version-control github

有没有办法在git中只克隆原始分支的子集?

E.g。

我有以下文件夹结构:

一个
| _ B
| _ C.
| _ D

克隆后,我希望:

一个
| _ C.
| _ D

我想使用此流程来部署我的应用程序:

  • 通过仅获取部分repo并忽略不必要的开发文件来使克隆更快。
  • 出于安全原因,我不想生产一些文件。

有什么建议吗?

3 个答案:

答案 0 :(得分:8)

从Git 1.7开始,你想要的就是所谓的稀疏结账。

找到了一个很好的解释here

答案 1 :(得分:4)

正如评论所暗示的那样,你无法克隆部分路径。如果您习惯于不同的源控制范例,例如subversion使用的范例,那么一开始可能看起来不直观。你不能这样做的原因是因为git存储了整棵树的快照。因此,您可以得到一个浅层克隆,这意味着您只能获得最近的历史记录。这更像是水平切片或截止,而不是您所追求的垂直切片。

获得所需内容的最佳方法是使用子模块。如果您已经拥有一个存储库中的所有内容,则必须从这个范例开始,或者使用filter-branch将存储库拆分为多个存储库。这也很棘手,因为你最终会在所有repos中进行空提交,如果去掉那些,你会有一些棘手的后续过滤分支,将子模块中正确的提交绑定到父存储库。

chapter on submodules处查看http://git-scm.com/book

答案 2 :(得分:0)

这是一种现代的 git 稀疏结账方法

git clone --no-checkout <REPOSITORY> <DIR>
cd <DIR>
git sparse-checkout init --cone  # checkout root dir files (build, etc.)
git sparse-checkout set <SUBDIR1> [<SUBDIR2> ...] # subdir list to include
git checkout

请参阅 git documentation 和 GitHub blog post