我应该在.gitignore文件中添加Django迁移文件吗?

由于迁移冲突,我最近收到了很多git问题,我想知道是否应该将迁移文件标记为忽略.

如果是这样,我将如何着手添加我的应用程序中的所有迁移,并将它们添加到.gitignore文件中?

推荐答案

引用Django migrations documentation人的话:

每个应用程序的迁移文件都位于该应用程序内部的"迁移"目录中,并被设计为作为其代码库的一部分提交和分发.您应该在您的开发机器上进行一次迁移,然后在您同事的机器、您的临时机器以及最终在您的生产机器上运行相同的migrations.

如果您遵循此过程,您应该不会在迁移文件中得到任何合并冲突.

在合并版本控制分支时,仍然可能会遇到基于同一父级迁移的多个迁移的情况,例如,如果对不同的开发人员同时引入了migrations.解决这种情况的一种方法是引入merge_migration.通常,这可以通过命令自动完成

./manage.py makemigrations --merge

这将引入一个新的迁移,它依赖于当前所有的头部migrations.当然,这只适用于头部迁移之间没有冲突的情况,在这种情况下,您必须手动解决问题.


考虑到这里的一些人建议您shouldn't将迁移提交给版本控制,我想详述一下您should实际上这样做的原因.

首先,您需要应用于生产系统的迁移记录.如果您将更改部署到生产环境并希望迁移数据库,则需要对当前状态进行描述.您可以为应用于每个生产数据库的迁移创建单独的备份,但这似乎是不必要的麻烦.

其次,迁移通常包含自定义的手写代码.并不总是可以使用./manage.py makemigrations自动生成它们.

第三,迁移应该包括在代码评审中.它们是对您的生产系统的重大更改,其中有很多地方可能会出错.

简而言之,如果您关心生产数据,请判断迁移到版本控制中的情况.

Django相关问答推荐

对象Django API中的对象

Django模型ManyToManyField.Add不起作用

DRF中没有参数的视图的警告-壮观

有没有办法在Django中按需/点击仅获取和序列化一部分数据以提高性能?

源自访问外键关系的模型方法 get_absolute_url 的 django 重复 SQL 查询

Django prefetch_related 与 3 个不直接相关的模型

`.objects` 属性在哪里添加到 Django 的 models.Model 类中的实例命名空间?

Nginx 响应 404 not found on Django media URL in preprod, dev ok

在 Django 模板中呈现标签名称而不是整数字段

JSP模板继承

django 用一个提交按钮提交两种不同的表单

Django - 如何在其管理模块中访问模型的详细名称?

在 Django 网站上找不到页面 404?

模型中的外键

Django rest-auth allauth 注册,带有邮箱、名字和姓氏,没有用户名

Django:在管理界面中显示图像

django 模板中对象的模型名称

AssertionError: `HyperlinkedIdentityField` 需要序列化程序上下文中的请求

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录