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

时间:2010-09-09 11:24:42

标签: 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不是正确的命令。

1 个答案:

答案 0 :(得分:5)

Partial cloning”的答案可以帮助您开始尝试浅层克隆 但它将受到限制:

  • 到某个深度,和/或到某些分支,
  • 但不是某些文件或目录(你可以通过稀疏结账获得文件或目录,但你仍然需要先获得完整的回购!)
  • 即使是某个承诺。
    (Git 2.5(2015年第2季度)支持单次提取提交!请参阅“Pull a specific commit from a remote git repository”)。

真正的解决办法是将巨大的远程仓库分成子模块 有关此类情况的说明,请参阅What are Git limitsGit style backup of binary files


2015年4月更新:

Git Large File Storage (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