6

我们有一个项目,其中包含数据和代码,捆绑到一个 Mercurial 存储库中。数据与代码一样重要(它包含业务逻辑的参数、一些输入等)。但是,数据文件的格式很少更改,独立于代码更改数据文件是很自然的。

统一存储库的一个优点是我们不必跟踪多个修订:如果我们需要重新创建先前运行的输出,我们只需将系统更新为存储在输出日志中的单个修订号。

一个缺点是,如果我们在多个磁头处于活动状态时修改数据,我们可能会丢失数据更改,除非我们手动将这些更改复制到每个磁头。

将代码和数据拆分到单独的存储库中是否还有其他优点/缺点?

4

2 回答 2

1

多个回购

  • 优点

    • 基于组件的方法(您可以识别可以相互独立发展的文件组)
    • 配置规范:列出系统工作所需的参考资料(此处为“修订版”)。如果您想修改一个部分而不更改另一个部分,则更新该列表。
    • 部分克隆:如果您不需要所有组件,则只能克隆您想要的组件(不适用于您的情况)
  • 缺点

    • 配置管理:您需要跟踪该配置(通常通过父仓库,注册子仓库
    • 在您的情况下,数据非常依赖于项目的某些版本(您可以拥有对项目的旧版本没有意义的新数据)

一个回购

  • 优点
    • 基于系统的方法:您将模块视为一个系统(项目和数据)。
    • 回购管理:多合一
    • 模块之间的紧密联系(这对数据有意义)
  • 缺点
    • 数据传播(正如您提到的,当几个 HEAD 处于活动状态时)
    • 中间修订(不是为了反映新功能,而只是因为一些数据发生了变化)
    • 更大的克隆(此处不相关,除非您的数据包含大型二进制文件)

对于不经常更改的非二进制数据,我仍然会将它们保存在同一个存储库中。

于 2012-11-30T08:07:05.667 回答
0

是的,您应该将代码和数据分开。将代码保存在版本控制中,将数据保存在数据库中。

我喜欢版本控制,因为我做了十多年的程序员,我喜欢这份工作。

但在过去的几个月里,我意识到:数据不能在版本控制中。有时,熟悉 git(或其他版本控制系统)的人很难“放手”。

您需要一个支持数据库模式迁移的良好 ORM。迁移(方案和数据迁移)保存在版本控制中,但数据不是。

我知道您的问题是关于使用一两个存储库,但也许我的回答可以帮助您获得不同的观点。

于 2014-09-10T05:05:09.620 回答