17

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

例如

我有以下文件夹结构:

A
|_ B
|_ C
|_ D

克隆后我想要:

A
|_ C
|_ D

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

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

有什么建议吗?

4

3 回答 3

25

从 Git 1.7 开始,你想要的就是可能的,所谓的 sparse-checkout。

在这里可以找到一个很好的解释。

于 2016-11-22T11:44:12.477 回答
1

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

获得所需内容的最佳方法是使用子模块。如果您已经在一个存储库中拥有所有内容,那么您将不得不从这个范例重新开始,或者使用 filter-branch 将存储库分成多个存储库。这也很棘手,因为您最终会在所有存储库中得到空提交,如果摆脱这些,您将有一些棘手的后续过滤器分支来将子模块中的正确提交绑定到父存储库。

看看http://git-scm.com/book关于子模块的章节

于 2012-11-14T09:52:47.063 回答
0

这是 git sparse checkout 的现代方法

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 文档和 GitHub博客文章

于 2021-02-22T10:43:03.600 回答