我们经常处理一个项目,我们已经处理了一个大型数据集(例如,少数几个1GB的文件),并且正在编写代码来分析它。
所有分析代码都在Git中,因此每个人都可以检查我们的中央存储库的更改。但是如何处理代码正在使用的数据集?
我想要存储库中的数据:
但是,我不想要git存储库中的数据:
似乎我需要一个带有代码主存储库和数据辅助存储库的设置。是否可以在git或POSIX中优雅地实现这一点的任何建议或技巧?我所想到的一切都是这样或那样的。
答案 0 :(得分:14)
使用子模块将巨型文件与源代码隔离开来。更多相关内容:
http://git-scm.com/book/en/v2/Git-Tools-Submodules
这些例子讨论了库,但这适用于大型膨胀事物,如用于测试,图像,电影等的数据样本。
你应该能够在开发过程中飞行,如果你需要查看新版本的巨型数据,只能在这里停留。
有时跟踪对此类内容的更改甚至不值得。
解决您获取更多数据克隆的问题:如果您的git实现支持您的操作系统上的硬链接,这应该是轻而易举的。
您的巨型数据集的性质也在起作用。如果你改变它的一部分,你是在改变巨大的blob还是几百万的几行?这应该决定VCS在为其播放通知机制方面的有效性。
希望这有帮助。
答案 1 :(得分:9)
这听起来像是尝试git-annex的完美场合:
git-annex允许使用git管理文件,而无需将文件内容检入git。 虽然这看似矛盾,但在处理大于git的文件时它很有用 目前很容易处理,无论是由于内存限制,校验和时间还是磁盘空间。
答案 2 :(得分:1)
Git BUP声称通过逐步备份大文件做得很好。
我认为BUP假定一个单独的存储库来执行它的工作,所以你最终还是会使用子模块。但是,如果你想要减少良好的带宽,那就是
答案 3 :(得分:1)
作为替代方案,数据可以驻留在由p2p服务同步的未跟踪(通过git)文件夹中。我们将此解决方案用于数十GB的数据集,并且它的工作非常好。
syncthing是我们使用的软件。
答案 4 :(得分:0)
我建议Git Large File Storage可以无缝集成到git生态系统中。它会设置指向大型文件的文本指针,但不会将其导出到存储库中。
安装(https://packagecloud.io/github/git-lfs/install)后,您可以使用git lfs install
在本地存储库中进行设置。然后使用它很容易。告诉它要跟踪的文件类型(git lfs track "*.gz"
,确保正在跟踪.gitattributes
,它应该可以正常工作。