有没有办法在git中只克隆原始分支的子集?
E.g。
我有以下文件夹结构:
一个
| _ B
| _ C.
| _ D
克隆后,我希望:
一个
| _ C.
| _ D
我想使用此流程来部署我的应用程序:
有什么建议吗?
答案 0 :(得分:8)
从Git 1.7开始,你想要的就是所谓的稀疏结账。
找到了一个很好的解释here。
答案 1 :(得分:4)
正如评论所暗示的那样,你无法克隆部分路径。如果您习惯于不同的源控制范例,例如subversion使用的范例,那么一开始可能看起来不直观。你不能这样做的原因是因为git存储了整棵树的快照。因此,您可以得到一个浅层克隆,这意味着您只能获得最近的历史记录。这更像是水平切片或截止,而不是您所追求的垂直切片。
获得所需内容的最佳方法是使用子模块。如果您已经拥有一个存储库中的所有内容,则必须从这个范例开始,或者使用filter-branch将存储库拆分为多个存储库。这也很棘手,因为你最终会在所有repos中进行空提交,如果去掉那些,你会有一些棘手的后续过滤分支,将子模块中正确的提交绑定到父存储库。
答案 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。