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

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

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


当前回答

您可以遵循以下流程。

您可以在本地运行makemigrations,这将创建迁移文件。将这个新的迁移文件提交到repo。

在我看来,你根本不应该在生产中进行大规模移民。您可以在生产环境中运行migrate,您将看到从本地提交的迁移文件应用了迁移。这样可以避免所有的冲突。

在LOCAL ENV中,要创建迁移文件,

python manage.py makemigrations 
python manage.py migrate

现在提交这些新创建的文件,如下所示。

git add app/migrations/...
git commit -m 'add migration files' app/migrations/...

在PRODUCTION ENV中,只执行以下命令。

python manage.py migrate

其他回答

引用自2022年的Django 4.0文档。(两个单独的命令= makemigrations和migrate)

为什么要创建和应用单独的命令 迁移是因为您将向版本控制提交迁移 将它们整合到你的应用中;他们不仅让你 开发更容易,它们也可以被其他开发人员使用 生产。

https://docs.djangoproject.com/en/4.0/intro/tutorial02/

我无法想象为什么会出现冲突,除非您正在以某种方式编辑迁移?这通常会以糟糕的结果结束——如果有人错过了一些中间提交,那么他们将无法从正确的版本升级,并且他们的数据库副本将被损坏。

我遵循的过程非常简单——无论何时你改变了一个应用程序的模型,你也提交了一个迁移,然后这个迁移不会改变——如果你需要模型中有一些不同的东西,那么你就改变模型,并在你的改变的同时提交一个新的迁移。

在未开发的项目中,当你发布时,你通常可以删除迁移,然后用0001_迁移从头开始,但如果你有生产代码,那么你不能(尽管你可以把迁移压缩成一个)。

您可以遵循以下流程。

您可以在本地运行makemigrations,这将创建迁移文件。将这个新的迁移文件提交到repo。

在我看来,你根本不应该在生产中进行大规模移民。您可以在生产环境中运行migrate,您将看到从本地提交的迁移文件应用了迁移。这样可以避免所有的冲突。

在LOCAL ENV中,要创建迁移文件,

python manage.py makemigrations 
python manage.py migrate

现在提交这些新创建的文件,如下所示。

git add app/migrations/...
git commit -m 'add migration files' app/migrations/...

在PRODUCTION ENV中,只执行以下命令。

python manage.py migrate

在git中有一堆迁移文件是很混乱的。迁移文件夹中只有一个文件不应该忽略。该文件是init.py文件,如果忽略它,python将不再在目录中查找子模块,因此任何导入模块的尝试都会失败。所以问题应该是如何忽略除了init.py之外的所有迁移文件? 解决方案是: 将“0*.py”添加到.gitignore文件中,它可以完美地完成工作。

希望这能帮助到一些人。

DR:提交迁移,解决迁移冲突,调整git工作流程。

感觉你需要调整你的git工作流程,而不是忽略冲突。

理想情况下,每个新特性都在不同的分支中开发,并与拉请求合并。

如果有冲突,pr就不能合并,因此需要合并他的特性的人需要解决冲突,包括迁移。这可能需要不同团队之间的协调。

提交迁移文件是很重要的!如果出现冲突,Django甚至可以帮你解决这些冲突;)