git clone 和 pull 忽略大文件

iku*_*iku 6 git

这是情况。临时分析存储库,每个单独的分析都有一个目录。每个目录都包含一个与一个或多个数据文件相连的脚本,这些数据文件具有不同的格式和不同的(有时相当大)大小。没有数据的脚本通常是无用的,所以我们想存储数据文件。另一方面,有时查看脚本而不被迫下载相关数据文件(以确定某些分析是如何进行的)很有用。

我们绝对不想将数据存储在单独的存储库中(运行时问题、将脚本与数据文件相关联等)

分析了什么:

  • git submodules - 分离的 repo,一切都将远离脚本(不在同一个目录中,所以随着时间的推移它会变得混乱)
  • git hooks - 旨在为推送请求应用约束或附加操作,如上所述 - 每个人都应该能够上传任何文件(此外:我们无权应用服务器端挂钩)

我想到的想法是,从存储库中提取或克隆某些位置或某些文件(即 >> 50 MB)会很方便。只是不要传输不需要的数据。是否可以?

如果某些文件在后续提交中没有被触及,从未来推送的角度来看它们是不必要的。可能(甚至可以肯定)我对 git 的底层机制缺乏一定的了解。我将不胜感激。

Cir*_*四事件 9

git clone --no-checkout --filter=blob:limit=100m

当服务器最终实现它时,这实际上将允许仅获取小于给定大小的文件。

然后,您必须检出所有文件,但大文件除外。一个可能有效的简单策略是git rev-list --filter=blob:limit=100 | xargs,但我现在懒得测试它。

有关更多详细信息,请参阅此答案:如何仅克隆 Git 存储库的子目录?

混帐LFS

这是一个已经可以在 GitHub 和 GitLab 上使用的解决方案。

你只是在 LFS 中跟踪你的大 blob,然后在没有 LFS 的情况下克隆如何克隆/拉出一个 git 存储库,忽略 LFS?

GIT_LFS_SKIP_SMUDGE=1 git clone SERVER-REPOSITORY
Run Code Online (Sandbox Code Playgroud)

最后手动提取您可能需要的任何丢失的 LFS 文件:https : //github.com/git-lfs/git-lfs/issues/1351

git lfs pull --include "*.dat"
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 1

Git稀疏签出允许您将子目录设置为签出或不签出等。据我所知,我认为它不能根据其他任何东西(例如大小)来做到这一点。