【问题标题】:Fetch/Pull Part of Very Large Repository?获取/提取非常大的存储库的一部分?
【发布时间】:2011-04-10 05:10:02
【问题描述】:

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

假设如下:

  • 我在本地有一个 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 不是正确的命令。

【问题讨论】:

  • 抱歉,我无法回答您的问题,但请注意,StackOverflow 上“强烈反对”签名和标语。你可以在这里找到更多信息:meta.stackexchange.com/questions/5029/…
  • 注意:使用 git-lfs(2015 年 4 月),pull/fetch 会更有效。请参阅我编辑的答案。
  • Git 2.5(2015 年第二季度)支持单次提取提交!我在下面编辑了我的答案,现在引用“Pull a specific commit from a remote git repository”。

标签: git


【解决方案1】:

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

  • 到一定深度,和/或到某些分支,
  • 但不适用于某些文件或目录(您可以通过稀疏签出获取文件或目录,但您仍然必须先获取完整的 repo!)
  • 即使是某个提交。
    (Git 2.5(2015 年第二季度)支持单个 fetch 提交!请参阅“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) 将使 pull/fetch 更加高效(GitHub,2015 年 4 月)。

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

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 2017-02-15
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多