【问题标题】:How to cleanly handle source code and data in a repository如何干净地处理存储库中的源代码和数据
【发布时间】:2011-08-01 01:51:08
【问题描述】:

我正在开展一个由少数 Python 脚本(最大 1M)和一个相对较大的数据集(1.5 GB)组成的协作科学项目。数据集与 python 脚本紧密相连,因为数据集本身就是科学,而脚本是它们的简单接口。

我使用 Mercurial 作为我的源代码控制工具,但我不清楚定义存储库的良好机制。从逻辑上讲,将它们捆绑在一起是有意义的,这样通过克隆存储库就可以获得整个包。另一方面,我担心处理大量数据的源代码控制工具。

是否有一个干净的机制来处理这个问题?

【问题讨论】:

    标签: mercurial repository dvcs large-files


    【解决方案1】:

    如果数据文件很少更改并且您通常需要所有这些文件,那么只需将它们添加到 Mercurial 并完成它。您的所有克隆都将是 1.5 GB,但这只是处理这么多数据的方式。

    如果数据是二进制数据并且经常更改,那么您可能会尽量避免下载所有旧数据。一种方法是使用 Subversion 子存储库。您将拥有一个.hgsub 文件,其中包含

    data = [svn]http://svn.some.edu/me/ourdata
    

    它告诉 Mercurial 从右侧 URL 创建一个svn checkout,并将 Subversion 工作副本作为data 放入您的 Mercurial 克隆中。 Mercurial 将为您维护一个名为 .hgsubstate 的附加文件,其中记录了 SVN 修订号以检查任何给定的 Mercurial 变更集。通过像这样使用 Subversion,您最终只能在计算机上获得最新版本的数据,但 Mercurial 将知道如何在需要时获取旧版本的数据。如果你走这条路,请看this guide to subrepositories

    【讨论】:

      【解决方案2】:

      有一个关于大型二进制文件的article on the official wiki。但是@MartinGeisler 的提议是一个非常好的新选择。

      【讨论】:

        【解决方案3】:

        我的第一个倾向是将 python 脚本分离到它们自己的存储库中,但我确实需要更多域信息来进行“正确”调用。

        一方面,如果要创建新的数据集,那么您需要一套能够处理所有这些数据集的核心工具,对吧?但我也可以看到新数据集如何引入脚本以前可能未处理的情况......尽管在理想的世界中,您似乎希望脚本以通用方式编写,以便它们可以处理未来数据和现有数据集??

        【讨论】:

        • 科学家们通常会为我无法控制的每个数据集推出一个新工具。这些脚本相对较轻,并且与每个数据集的怪癖紧密相关。对我来说,定制一个小脚本比对其他人强制使用数据交换协议更容易。
        猜你喜欢
        • 1970-01-01
        • 2020-10-01
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多