配置 git 以使用 flyway 对具有不同名称模式的文件进行提交差异

Configure git to do diff on commit against files with a different name pattern using flyway

我们使用 git 来管理我们的代码存储库。

我们的一个存储库是使用 flywaydb.

的数据库迁移存储库

数据库具有随时间变化的状态和对象依赖性,因此使用 flyway 的最佳做法是使用时间戳或数字增加文件前缀,然后是脚本名称。通过这种方式,文件按字母顺序(按时间顺序)列出并由 flyway 按顺序执行,它跟踪最后一个脚本的状态 运行,并且可以 运行 丢失的脚本。

问题是当文件随时间顺序命名时,它们替换相同的数据库对象(例如数据库视图),我们如何配置 git 或 flyway 以便在提交时, git 是否足够聪明,可以根据模式而不是该文件的先前版本对具有不同名称的文件进行文件差异?

例如,我创建了一个视图,几天后有人更新了该视图...这将需要两个文件,例如:

V20181121131512__create_myview.sql
V20181126235217__replace_myview.sql

在每个视图中,我们创建或替换视图并更新它。我想知道是否有任何方法可以将 git 配置为在提交时根据文件命名模式进行区分。例如,后缀,将用于相同的数据库对象名称。

当有很多拉取请求需要审查时,我不想一直进行手动差异,我想快速查看不同开发人员提交之间的变化以加快我的审查时间。但是随着时间的推移,数据库状态的顺序命名会强制将数据库对象的先前代码放入不同的文件中,因此对同一个数据库对象(如 SQL 视图 "appears")的每次提交都是一个全新的文件,并且没有历史可以与之相比。

对如何解决这个问题有什么想法吗? git 是否可以配置为在提交时根据文件命名后缀模式执行差异?或者,是否有另一种替代方法来构建 flyway 文件的回购和文件命名,以便随着时间的推移可以处理数据库状态?

您可以通过为所有不直接保存数据的长寿命对象切换到 Flyway repeatable migrations 来完全避免此问题。

它们允许您将视图的历史记录保存在 Git 中的同一个文件中。只要校验和发生变化,Flyway 就会自动重新应用它。