git - 获取/pull 非常大的存储库的一部分?

标签 git

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

假设如下:

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

我如何有效地从远程存储库中 pull 或获取最后提交的版本,例如 DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN?

只是来自远程存储库的 DIR001/subdir2/fileB1 ... DIR001/subdir2/fileBN 的单个文件的最后提交版本,没有别的吗?

我如何有效地 pull 或获取所述文件子集的先前提交版本,而不是其他任何东西?

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

最佳答案

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

  • 达到一定深度,和/或某些分支,
  • 但不是某些文件或目录(您可以通过稀疏 check out 获取文件或目录,但您仍然必须先获取完整的存储库!)
  • 甚至是某个提交。
    (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)将使 pull/fetch 更加高效(来自 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

关于git - 获取/pull 非常大的存储库的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676038/

相关文章:

xcode - 我如何查看 Git 将向 Xcode 中的服务器推送哪些文件?

GitHub 的密码缓存助手错误

git - 如果 Git 子模块移动到另一台服务器怎么办?

git - 如何使用 Visual Studio Tools for Git 将跟踪文件移动到未跟踪文件

git - 仅发布某些 git 分支

git - 为特殊文件类型设置 'git diff'

git - 浏览 repo 中标记版本的列表?

git 仅提交文件的时间戳修改

java - 如何在java中从ProcessBuilder执行 "git fetch -v --progress <baseURL> <releaseBranch>"时输入密码

git - 通过 pull 请求解决 merge 冲突