如何干净地处理存储库中的源代码和数据

时间:2011-04-07 21:47:38

标签: mercurial repository dvcs large-files

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

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

有没有一个干净的机制来处理这个?

3 个答案:

答案 0 :(得分:7)

如果数据文件很少变化并且您通常需要所有数据文件,那么只需将它们添加到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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

一方面,如果要创建新的数据集,那么你需要一套核心工具来处理所有这些数据集,对吧?但是我也可以看到新数据集如何引入脚本以前可能没有处理过的案例......虽然看起来在理想的世界中你会想要以一般方式编写的脚本,以便它们可以处理未来的数据和现有的数据集??