与其他人在同一分支上工作时如何管理迭代 django 迁移

问题描述 投票:0回答:1

我正在开发一个 django 项目,很多时候我会迭代一个新模型,一路创建新的迁移文件。迁移文件名不同,但会更改同一模型的部分。这些迁移文件也与其他开发人员共享。为了与在同一分支上工作并应用迁移的其他开发人员同步更改,执行操作的正确顺序是什么?我知道重新初始化数据库是一种解决方案,但可以说不是一个非常干净的解决方案。

我在删除接收端的最后一个迁移后尝试了这个序列,但它没有按预期工作

python manage.py migrate app_name XX #returns to the previous migration
python manage.py makemigrations 
python manage.py migrate # this creates issue because the relations-columns already exist

接下来要做的合乎逻辑的事情是

python manage.py migrate --fake

但是,这并不能解决问题,因为更新的更改未得到反映。

最后我也尝试过

python manage.py makemigrations --merge

但这并没有找到要合并的东西。

我收到的错误是:

Relation "foo" already exists

表示该表已存在于数据库模式中。

django migration
1个回答
0
投票

看起来您有两个迁移实际上正在创建

foo
无论是什么。有几种方法可以解决这个问题。您可以手动检查迁移文件并找到有问题的迁移,将其删除以及所有将来的迁移(假设没有创建任何手动迁移文件)并再次运行
python manage.py makemigrations

如果您不习惯这样做,那么您可以尝试以下步骤:

  1. 登录到您尝试部署到的环境所附加的数据库(我们称之为产品)。

  2. 执行以下查询:

select * from django_migrations order by id desc;

这应该按降序显示实际应用于数据库的迁移。记下应用程序和名称。

  1. 转到您的代码库并删除该点之后的所有迁移。
  2. 再次运行
    python manage.py makemigrations

这应该会创建一组新的迁移,而不会出现您所看到的冲突。

警告:执行此操作之前,请确保您没有任何自定义迁移文件。 如果您仅使用

python manage.py makemigrations
创建迁移文件,这不会成为问题。

© www.soinside.com 2019 - 2024. All rights reserved.