我有一个应用程序,我想今天为它创建一个新的迁移。当我运行时
$ alembic revision -m "__name__"
我收到一条消息
Only a single head is supported. The script directory has multiple heads (due branching), which must be resolved by manually editing the revision files to form a linear sequence.
Run `alembic branches` to see the divergence(s).
运行
alembic branches
什么都不做
我是 Alembic 的新手。有 2 个开发人员在开发这个应用程序,我们有 2 个 git 分支 - master 和 develop(我不确定这是否与它有关)。
有什么线索吗?
最佳答案
也许最传统(也是最强大)的解决方案是使用 alembic merge 头
。就像在 Git 中有两个分支时,您可以通过 merge 提交将它们重新组合在一起,在 Alembic 中,当您有两个分支时,您可以通过 merge 修订将它们重新组合在一起。
例如,假设我们有一个添加表 A 的修订版 1a6b1a4a0574 和一个添加表 B 的修订版 2e49118db057。我们可以在 中看到这些修订版(都标记为
:(head)
)蒸馏历史
$ alembic history
<base> -> 2e49118db057 (head), Add table B
<base> -> 1a6b1a4a0574 (head), Add table A
然后我们可以通过运行 alembic merge 头
来 merge 它们:
$ alembic merge heads
Generating /Users/markamery/alembictest/alembic/versions/409782f4c459_.py ... done
$ alembic history
2e49118db057, 1a6b1a4a0574 -> 409782f4c459 (head) (mergepoint), empty message
<base> -> 2e49118db057, Add table B
<base> -> 1a6b1a4a0574, Add table A
如果您的某个修订可能已经在某处运行(包括在您的一位同事的开发机器上),那么您可能想要使用 alembic merge
而不是修补 正如此处的其他答案所建议的那样,其中一个修订版本的 down_revision
。修补向下修订的危险在于它可能导致修订永远不会被应用。例如,假设您的同事 Bob 已经 pull 下您的修订版 2e49118db057 的分支并运行 alembic upgrade head
,创建表 B。然后您决定修改 2e49118db057 的 down_revision
指向 1a6b1a4a0574,Bob 以前从未见过或跑过。 Bob pull 下您的更改,运行 alembic upgrade head
,然后...什么也没有发生,因为就 Alembic 而言,他已经在 head
并且不需要运行 1a6b1a4a0574。所以 Bob 最终永远不会得到表 A,而且可能永远不会弄清楚他的数据库为什么会处于损坏状态。
不要破坏 Bob 的数据库 - 改为进行 merge 修订。
关于python - alembic 修订 - 多头(由于分支)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22342643/