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

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

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

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

从Django迁移文档引用:

每个应用程序的迁移文件都位于该应用程序的“迁移”目录中,并被devise为承诺并作为其代码库的一部分进行分发。 你应该在你的开发机器上制作一次,然后在你的同事的机器,登台机器,最终生产机器上运行相同的迁移。

如果您遵循此过程,则不应在迁移文件中发生任何合并冲突。

为了减轻你目前遇到的任何问题,你应该指定哪个版本库或分支机构拥有授权版本的迁移文件,然后使用git的属性机制为这些文件指定合并策略“我们的”。 这将告诉git始终忽略对这些文件的外部更改,并偏好本地版本。

没有。

我已经经历了这么多次,而且在我的生活中,我无法find需要在回购中进行移民的情况。

正如我所看到的,模式的最终logging是models.py 。 如果我合并了一个变更,而其他人则将其变更,当他们运行makemigrationsmigrate时,所有变更都是正确的。 没有必要定义什么是“我们”的策略是用于迁移。

如果我们需要回滚,那么我们恢复models并迁移。 一切顺利,没有问题,永远。

没有抱怨,一个领域已经存在,等等

我想知道是否有人可以给我一个具体的例子,在我能够开始工作之前,我需要合并另一个开发人员的迁移文件。 我知道文件说我应该,所以我认为是这样的。 但是我从来没有遇到过。

任何人?

你可以按照下面的stream程。

您可以在本地运行makemigrations ,并创build迁移文件。 提交这个新的迁移文件回购。

在我看来,你不应该在生产中运行makemigrations 。 您可以在生产环境中运行migrate ,您将看到从您从本地签入的迁移文件应用了迁移。 这样你可以避免所有的冲突。

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

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

如果存在冲突,PR不能合并,因此需要合并其特征的人需要解决冲突,包括迁移。

我无法想象为什么你会冲突,除非你编辑迁移莫名其妙? 这通常会很糟糕 – 如果有人错过了一些中间提交,那么他们将不会从正确的版本升级,他们的数据库副本将被损坏。

我遵循的过程非常简单 – 只要您更改应用程序的模型,就可以提交一个迁移,然后该迁移不会更改 – 如果您需要模型中的不同内容,则更改模型并提交一个新的迁移伴随着您的变化。

在绿地项目中,您经常可以删除迁移,并在发布时从头开始0001_迁移,但是如果您有生产代码,则不能(尽pipe可以将迁移压缩为一个)。

通常使用的解决scheme是,在将任何内容合并到主机之前,开发人员必须撤消任何远程更改。 如果在迁移版本中存在冲突,则应将其本地迁移(远程迁移由其他开发者运行,可能在生产中)重新命名为N + 1。

在开发过程中,可能没有提交迁移(不要添加忽略,只是不要add它们)。 但是一旦你投入生产,你将需要它们来保持模式与模型变化同步。

然后您需要编辑该文件,并将dependencies更改为最新的远程版本。

这适用于Django迁移,以及其他类似的应用程序(sqlalchemy + alembic,RoR等)。