2017-09-05 106 views
0

我正在寻找一种方法来高效地在git中存储大文件,而无需使用多个本地副本。在git中存储大文件而不复制

我试过git lfs,但是它在每个提交的每个修改文件中创建了一个.git/lfs/objects/副本。这意味着我需要至少两倍的磁盘空间(如果我经常使用git lfs prune)。

据我所知,这是为了保持git工作流程,但我的数据是在数百个GB中,这并不是真的可用。

回答

0

Git的设计和优化用于存储可随时间变化版本的文本文件。正因为如此,在处理大型二进制文件时,它历来会出现相当短的时间。虽然git LFS是将大型二进制文件的存储集成到git工作流中的好方法,但它仍不是git的设计目的。

由于如何实现LFS的本质,保持大文件的本地副本是不可避免的。从根本上讲,它只是将git直接连接到二进制文件存档的机制。

如果你在处理数百GB的二进制文件,git可能不是你需要的正确工具。 (好吧,也许对于存储在你的项目中的任何文本文件。)但是你可能试图将一个方形的钉子撞到一个圆孔中。

正如我的建筑师朋友所说:“当你拥有的只有一把锤子时,所有东西看起来都像是螺丝钉。”

我几乎完全处理源代码,所以除了检查为媒体工件设计的文档管理系统之外,我无法真正做出具体的建议。

如果您确定要坚持使用git,您可以构建一个类似于软件包管理器的机制,根据需要使用可存储在回购站中的配置和脚本来下拉需要的工件。

+0

我脑海中的想法是只存储版本信息以及如何检索回购库中的文件(如git lfs),但忽略git工作流并使用单独的命令检索/上传二进制文件。这不是很方便,但在某些情况下似乎很有用,我很惊讶我找不到这样的工具,这就是为什么我发布我的问题 – nikidimi

+0

这基本上是有多少人在git-lfs之前处理过这个问题。有许多工具可以按照您设想的方式工作,但它们旨在用于管理软件包(maven,nuget,npm等)或构建工件(Artifactory,Archiva,Nexus等)。你能告诉我们你正在使用什么类型的数据吗?它可能有助于我们提供指导。 – LightBender

+0

是的,我的研究发现了Artifactory/Nexus以及套餐管理系统的课程。我的数据是巨大的文本文件(大部分是用gzip压缩),包含基因序列变异。格式通常是VCF(https://en.wikipedia.org/wiki/Variant_Call_Format)或非常相似。 – nikidimi