python - alembic 修订 - 多头(由于分支)错误

标签 python git alembic

我有一个应用程序,我想今天为它创建一个新的迁移。当我运行时

$ 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/

相关文章:

python - "alembic current"和 "alembic history"搜索不同的路径吗?

python - Flask 无法运行 db migrate - NameError : name 'conn_uniques' is not defined

git - 更改 Git 用于调用 GnuPG 签署提交的二进制文件?

ruby-on-rails - 为什么我的部署检查在这里失败

python - 对于任何索引,返回前两个索引中的最小值

带有 Phantomjs 的 Python Selenium - 单击失败 : ReferenceError: Cant't find variable

git stash 和 git stash 应用时无需立即清除工作目录

python - Alembic 列类型更改会导致语法错误

python - 如何使用Twisted中收到的数据?

Python n_jobs 用于大规模问题