获取/拉取超大型存储库的一部分?

Gre*_*man 10 git

这可能是显而易见的,之前已经多次以不同的方式询问过,但是在搜索了一段时间之后我找不到答案.

假设如下:

  • 比方说,我本地有一块500GB的磁盘;
  • 我有一个100 TB的远程存储库; 因此,克隆整个存储库的成本根本不可行;
  • 用于创建远程存储库的工作目录由1000个顶级目录DIR001,DIR002,... DIR00N组成,每个目录包含多个子目录,文件仅在叶子目录下(例如DIR001/subdir1/fileA1 ... DIR001/subf1/fileAN和DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN,...
  • 我没有明确标记或分支目录DIR001,DIR002,... DIR00N或其他任何事情
  • 我初始化一个全新的本地git存储库

如何有效地从远程存储库中提取或获取DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN的最后提交版本,而不是其他任何内容?

来自远程存储库的DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN 中的单个文件的最后提交版本,没有其他内容?

如何有效地提取或获取以前提交的所述文件子集的版本而不是其他内容?

也许fetch/pull不是正确的命令.

Von*_*onC 6

" 部分克隆 " 的答案可以帮助您开始尝试浅层克隆.
但它将是有限的:

  • 到某个深度,和/或某些分支,
  • 但不是某些文件或目录(你可以通过稀疏结账获得文件或目录,但你仍然需要先获得完整的回购!)
  • 甚至一定的承诺.
    (Git 2.5(2015年第2季度)支持单次提取提交!请参阅" 从远程git存储库中提取特定提交 ").

真正的解决方案是将巨大的远程仓库分成子模块.
请参阅什么是Git限制二进制文件的Git样式备份来说明这种情况.


2015年4月更新:

Git大文件存储(LFS)可以提高拉/获取效率(GitHub,2015年4月).

该项目是git-lfs(请参阅git-lfs.github.com)并在支持它的服务器上进行测试:lfs-test-server:
您只能在git仓库中存储元数据,在其他地方存储大型文件.

https://cloud.githubusercontent.com/assets/1319791/7051226/c4570828-ddf4-11e4-87eb-8fc165e5ece4.gif