git克隆和拉取忽略大文件
情况是这样的。Ad hock分析存储库,每个分析都有一个目录。每个目录都包含一个与一个或多个数据文件连接的脚本,这些文件的格式不同,大小也不同(有时相当大)。没有数据的脚本通常是无用的,因此我们希望存储数据文件。另一方面,有时查看脚本而不必被迫下载相关的数据文件(以确定如何进行某些分析)是很有用的 我们绝对不希望将数据存储在单独的存储库中(运行时问题、将脚本与数据文件关联等) 分析内容:git克隆和拉取忽略大文件,git,Git,情况是这样的。Ad hock分析存储库,每个分析都有一个目录。每个目录都包含一个与一个或多个数据文件连接的脚本,这些文件的格式不同,大小也不同(有时相当大)。没有数据的脚本通常是无用的,因此我们希望存储数据文件。另一方面,有时查看脚本而不必被迫下载相关的数据文件(以确定如何进行某些分析)是很有用的 我们绝对不希望将数据存储在单独的存储库中(运行时问题、将脚本与数据文件关联等) 分析内容: git子模块-分离的repo,所有内容都将远离脚本(不在相同的目录中,因此随着时间的推移会变得混乱) gi
- git子模块-分离的repo,所有内容都将远离脚本(不在相同的目录中,因此随着时间的推移会变得混乱)
- git钩子——旨在为推送请求应用约束或附加操作,如上所述——每个人都应该能够上传任何文件(此外:我们没有权限应用服务器端钩子)
如果某些文件未涉及后续提交,则从未来推送的角度来看,这些文件是不必要的。可能(甚至可以肯定)我对git的底层机制缺乏一定的了解。我非常感谢您的澄清。Git sparse checkout允许您设置subdirs是否要签出,等等。尽管如此,我不认为它可以基于任何其他因素(例如大小)来完成此操作。
Git clone--无签出--filter=blob:limit=100m
当服务器最终实现时,这实际上只允许获取小于给定大小的文件
然后你必须签出所有文件,但大文件除外。一个可能有效的简单策略是git rev list--filter=blob:limit=100 | xargs
,但我现在懒得测试它
有关更多详细信息,请参阅此答案:
git LFS
这是一个已经可以在GitHub和GitLab上使用的解决方案
您只需在LFS中跟踪您的大blob,然后不使用LFS进行克隆
最后手动提取您可能需要的任何缺失的LFS文件:
据我所知,git clone下载所有数据仍然存在问题,对吗?是的,如果你每次都从零开始克隆,恐怕没有多大用处。我快速搜索了一下,也许你已经找到了,但我发现这个页面实际上非常全面,关于规模过大的git回购是一个痛苦的话题,原因很多,并且有各种各样的修复/帮助建议:它有一些额外的建议和信息,你可能会觉得有用。
GIT_LFS_SKIP_SMUDGE=1 git clone SERVER-REPOSITORY
git lfs pull --include "*.dat"