1 个不稳定版本
0.3.0 | 2022年1月5日 |
---|
#9 in #conflict
23KB
436 行
Regrate 迁移管理
简介
管理迁移,按顺序应用它们,处理合并冲突。
# create a new shell-based migration
regrate init --shell
# Edit the up and down scripts (bash since --shell was used)
edit regrate/latest/up.sh
edit regrate/latest/down.sh
# Run the current migration (to test it out) by passing them to bash in order
regrate run -- bash {}
# Once the migration is working right, we can commit it.
regrate commit -m "add two columns"
# With our migrations complete, we can push it up!
git add -A && git commit -m "initial migration"
# Try to push it. first rebase onto latest...
git rebase main ## ERROR, conflicts!
# Someone else already pushed a migration. you can either:
# 1. merge the migrations together (you're in dev and willing to reset your db)
# 2. better idea would be to move your local changes to a new migration:
regrate resolve
# regrate-resolve moves your local changes into a new migration,
# leaving your peer's as the base.
edit regrate/latest/up.sh # your peer added one of your columns!
regrate commit -m "add one column"
git add -A && git rebase --continue
git push # Yay!
总之,如果有人声称下一个迁移名称,你将与他们的更改发生合并冲突。Regrate可以帮助将您的冲突标记解析为新的迁移。
您的脚本应该是幂等的,因为它们将每次从开始按顺序执行。regrate不会跟踪当前运行时版本。为了帮助,regrate-run
将为迁移的每个步骤设置REGRATE_INDEX
,这可以帮助跟踪给定脚本是否应该在有状态的环境中(在完成时,脚本将更新共享变量为REGRATE_INDEX
)运行。
regrate
将从迁移脚本的 内容中推导名称。这意味着一旦提交,迁移脚本就不再可编辑。regrate-valid
将抱怨哈希不匹配。这可以用于预提交钩子来检测不良更改。
还提供了一个库,可用于遍历当前目录中的迁移。这在运行时很有用。在这种情况下,您有责任根据需要调用脚本。其他语言的包也存在,并允许您运行迁移。
安装
Cargo
- 按照这个指南安装rust工具链,以便通过cargo安装。
- 运行
cargo install regrate
工作原理
“当前版本”是开放的。您可以对其进行更改,其名称总是众所周知的。如果有两个人试图更改开放的版本,将发生合并冲突。要从当前版本计算下一个版本,请获取当前版本字符串,计算该版本中所有迁移脚本的哈希值,然后将版本和哈希值连接起来。对结果进行哈希处理,这就是您的下一个版本名称。此序列可以重复以生成名称列表。
许可
根据您的选择,许可为以下之一
- Apache License,版本2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可定义的,您有意提交以包含在作品中的任何贡献,都将双重授权如上所述,不附加任何其他条款或条件。
参见 CONTRIBUTING.md。
依赖项
~8–17MB
~208K SLoC