如何配置Git使编号重复的数据库迁移脚本合并时触发冲突?
实现方案说明
两种方式都可以实现需求,优先推荐Git配置+CI校验结合的方案,覆盖本地和远程的双重校验:
1. 本地通过Git配置实现合并冲突检测
Git支持自定义合并驱动,可以通过以下配置实现需求:
- 首先在迁移脚本存放目录(假设为
db/migrations/)下新增.gitattributes文件,指定该目录下的sql文件使用自定义合并规则:db/migrations/*.sql merge=check_migration_id - 编写编号校验脚本,核心逻辑为:提取两个待合并分支中所有迁移脚本的编号前缀,检测是否存在重复编号,存在重复则返回非0值,触发Git合并冲突。脚本可以直接存放在仓库中方便团队成员共用。
- 配置Git自定义合并驱动,执行以下命令关联校验脚本:
git config merge.check_migration_id.name "校验迁移脚本编号是否重复" git config merge.check_migration_id.driver /仓库内脚本路径/check-migration-id.sh %O %A %B
该方案的优势是开发者在本地合并代码时就能提前发现冲突,不需要等到推送到远程才暴露问题,缺点是依赖所有开发者本地完成Git配置,未配置的环境依然可能合入重复编号的脚本。
2. CI侧新增校验逻辑作为强管控
在CI流水线的PR校验阶段新增迁移脚本编号检查步骤,每次提交PR时自动扫描所有迁移脚本的编号前缀,只要存在重复编号直接阻断合并。
该方案不依赖开发者本地配置,是强制的安全防线,不会出现遗漏。
建议两种方案同时落地:本地配置让开发者提前发现问题,减少无效提交,CI作为最后一道校验保证仓库代码一定符合规则。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

