Git +大数据集?

时间:2011-06-07 16:40:46

标签: git version-control dataset

我们经常处理一个项目,我们已经处理了一个大型数据集(例如,少数几个1GB的文件),并且正在编写代码来分析它。

所有分析代码都在Git中,因此每个人都可以检查我们的中央存储库的更改。但是如何处理代码正在使用的数据集?

我想要存储库中的数据:

  • 当用户首次克隆存储库时,数据应该随附。
  • 数据不是100%只读;现在,然后更正数据点,或发生轻微的格式更改。如果数据发生微小变化,应在下次结账时通知用户。

但是,我不想要git存储库中的数据:

  • git克隆一个备用副本(所以我的主目录中有两个版本)将提取我已有的几GB数据。我宁愿将它放在固定位置[设置数据必须在〜/ data中的规则]或根据需要添加链接。
  • 使用存储库中的数据,可能无法复制到拇指驱动器,这在我处理一百行代码时很烦人。
  • 如果修复了错误的数据点,我永远不会再次查看错误的版本。可以在纯文本文件中或由提供数据的人(或根本不是)来跟踪对数据集的更改。

似乎我需要一个带有代码主存储库和数据辅助存储库的设置。是否可以在git或POSIX中优雅地实现这一点的任何建议或技巧?我所想到的一切都是这样或那样的。

5 个答案:

答案 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的数据集,并且它的工作非常好。

  • 数据集直接在对等方之间共享。
  • 根据p2p软件,可以保留和恢复旧版本。
  • 如果发生变化,数据集将自动更新。

syncthing是我们使用的软件。

答案 4 :(得分:0)

我建议Git Large File Storage可以无缝集成到git生态系统中。它会设置指向大型文件的文本指针,但不会将其导出到存储库中。

安装(https://packagecloud.io/github/git-lfs/install)后,您可以使用git lfs install在本地存储库中进行设置。然后使用它很容易。告诉它要跟踪的文件类型(git lfs track "*.gz",确保正在跟踪.gitattributes,它应该可以正常工作。