2011-06-07 21 views
19

我们经常在一个项目中处理一个大型数据集(比如说少数每个1GB的文件),并且正在编写代码来分析它。Git +一个大型数据集?

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

我想在库中的数据:

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

不过,我不想在git仓库中的数据:

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

看来我需要一个主代码库和一个辅助数据库的设置。任何建议或窍门优雅地实现这一点,无论是在git或POSIX中?我想过的每件事都是以某种方式或某种方式进行的。

回答

14

使用子模块从您的源代码中分离出您的巨型文件。更多关于这里:

http://git-scm.com/book/en/v2/Git-Tools-Submodules

例子说说库,但这个工程的像进行检测,图像,电影数据样本大臃肿的东西,等

你应该能飞,而如果您需要查看新版本的巨型数据,那么只能在这里和那里暂停。

有时甚至不值得追踪对这些事情的改变。

为了解决你的问题,获得更多的数据克隆:如果你的git实现支持操作系统上的硬链接,这应该是一件轻而易举的事情。

您的巨型数据集的性质也在起作用。如果你改变了一些,你是在改变巨大的斑点还是在数百万的几行?这应该确定VCS将如何有效地为其发挥通知机制。

希望这会有所帮助。

+2

该链接已过时。我认为它现在应该是http://git-scm.com/book/en/v2/Git-Tools-Submodules。 – 2014-12-30 07:41:57

+0

完成。感谢您的评论。 – 2015-01-13 00:43:00

+0

我认为保持大型数据集,特别是如果它们没有改变,在git是矫枉过正。将数据集保持在git之外,并使用简单的脚本来复制源数据或从wget或ftp数据将是最佳选择。 – cpbills 2017-02-02 21:34:13

9

这听起来像是一个完美的机会来尝试git-annex

混帐附件允许管理文件使用Git,而不检查文件内容到饭桶。 虽然这看起来似乎有些矛盾,但在处理大于git的文件时,可以使用当前容易处理的文件,无论是由于内存限制,校验和还是磁盘空间。

+0

+1在 – sehe 2011-06-07 19:57:16

+1

Thx之前没有看到提示。有很多依赖关系,所以我不能在工作中使用它,每个新项目都有大量的文书工作,但我肯定会为其他项目尝试。 – 2011-06-09 13:53:11

1

Git BUP声称做增量备份大文件做得很好。

我认为BUP假设有一个单独的存储库来做这是工作,所以你最终会使用子模块。但是,如果你想减少带宽,这是事情

1

作为一种替代方案,数据可以驻留在未跟踪(通过git)文件夹,该文件夹由p2p服务同步。我们使用这个解决方案来处理几十GB的数据集,并且它工作得非常好。

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

syncthing是我们使用的软件。