我查看了.NET Migrations Engine上的所有选项,发现使用 Rails 样式迁移的引擎是最有趣的,主要是因为它们以与数据库无关的方式编写,可以轻松用于不同的数据库平台。
然而,我看到了一个明显的问题,他们似乎都没有开箱即用地解决:源代码控制分支。
情景
- 功能 1 正在 branch1 上开发,并在名为 column1 的表中添加一列
- 功能 2 正在 branch2 上开发,并向名为 column2 的同一个表添加一列
- 发行版 1.1 包含功能 2,但功能 1 尚未完成
- 功能1完成并合并到主干
- 发布了 1.2 版,但是进入主干的新 column1 字段是版本 1(直接在代码中与 1.1 版绑定),因此在迁移时不会在数据库中更新
使用Migrator.NET等工具,问题似乎是迁移版本与实际软件版本相关,而不是 SCC 提交。但是,该属性必须添加到源代码管理中的代码中。我已经看到使用日期而不是版本的示例,但这似乎并不能解决手头的问题,而不是增量版本控制。
我找到的最接近答案的是Liquibase FAQ page,但是对于 .NET 中的 Rails 样式框架,该解决方案需要更改代码(即使在Rik Migrations中,其结构类似于 liquibase 更改日志文件的属性) :
Liquibase 是否适用于分支机构? 是的。由于每个更改都是独立的,因此在不同分支中进行的数据库更改然后合并将在下次运行 Liquibase 时运行。您可能会遇到语句运行顺序的问题,但您遇到的任何问题都可以通过重新排序更改日志文件轻松解决。
处理此问题的典型方法是什么?
如果有什么不同,我使用 Git 进行源代码控制。注意我已经看过题为“复杂分支系统中的数据库迁移”的帖子,但它并没有真正提供答案。