我们经常处理一个项目,在这个项目中,我们收到了一个大型数据集(例如,一些文件,每个文件大小为 1GB),并且我们正在编写代码来分析它。
所有分析代码都在 Git 中,因此每个人都可以检查进出我们中央存储库的更改。但是如何处理代码正在处理的数据集呢?
我想要存储库中的数据:
- 当用户首次克隆存储库时,数据应随附。
- 数据不是 100% 只读的;有时会更正数据点,或者发生较小的格式更改。如果数据发生细微变化,应在下次 checkout 时通知用户。
但是,我不想要git仓库中的数据:
- git 克隆一个备用副本(因此我的主目录中有两个版本)将提取我已有的几 GB 数据。我宁愿将其放在固定位置 [设置数据必须在 ~/data 中的规则] 或根据需要添加链接。
- 对于存储库中的数据,可能无法复制到拇指驱动器,当我只处理一百行代码时,这很烦人。
- 如果错误的数据点得到修复,我将永远不会再查看错误的版本。可以在纯文本文件中或由提供数据的人(或根本不提供)跟踪对数据集的更改。
看来我需要一个包含代码主存储库和数据辅助存储库的设置。在 git 或 POSIX 中优雅地实现这个的任何建议或技巧?我所想到的一切在某种程度上都是一团糟。
最佳答案
使用子模块将您的巨型文件与您的源代码隔离开来。更多相关信息:
http://git-scm.com/book/en/v2/Git-Tools-Submodules
这些示例讨论的是库,但这适用于大型臃肿的东西,例如用于测试的数据样本、图像、电影等。
您应该能够在开发过程中飞行,只有在您需要查看新版本的巨型数据时才会在这里和那里停下来。
有时甚至不值得跟踪这些事情的变化。
要解决获取更多数据克隆的问题:如果您的 git 实现支持操作系统上的硬链接(hard link),这应该是一件轻而易举的事。
您的庞大数据集的性质也在发挥作用。如果你改变其中的一些,你是在改变巨大的 Blob 还是数百万集中的几行?这应该决定了 VCS 在为其播放通知机制方面的有效性。
希望这对您有所帮助。
关于Git + 大数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6268628/