我正在处理一个相当复杂的Django项目(50+模型),它有一些复杂的逻辑(许多不同的工作流、视图、信号、API、后台任务等等)。让我们称其为project-base。目前使用Django 1.6 +南方迁移和相当多的其他第三方应用。
现在,其中一个要求是创建这个项目的分支,它将在这里和那里添加一些字段/模型,并在此基础上添加一些额外的逻辑。让我们称其为project-fork。大部分额外的工作将在现有的模式之上,但也会有一些新的。
随着project-base的不断开发,我们希望这些特性也能进入project-fork (就像git-land中的重基/合并)。project-fork中的额外更改不会合并回project-base中。
实现这一目标的最佳方法是什么?以下是我的一些想法:
project-fork中的South使其与project-base的最新变化保持一致,正如here解释的那样。使用信号和任何其他方法,必须尽可能地将新逻辑与project-fork保持松散耦合,以避免任何潜在的冲突。project-base模型,而是在引用旧模型的不同应用程序中创建新模型(即使用OneToOneField)。额外的逻辑可能最终会出现在旧的和/或新的应用程序中。我会选择选项1,因为总体上它似乎不那么复杂,但可能暴露出更大的风险。以下是我对此的看法:
project-base上的迁移
project-fork上的迁移
合并之后,迁移将如下所示:
使用这种方法有什么缺陷吗?有更好的办法吗?
谢谢您抽时间见我。
发布于 2015-04-22 13:39:09
南方正式工作流程:
南方的官方建议是尝试使用--merge标志:http://south.readthedocs.org/en/latest/tutorial/part5.html#team-workflow
这显然不会在所有情况下都起作用,但从我的经验来看,它在大多数情况下都是有效的。
陷阱:
“更好”的方法通常是避免同时更改相同的模型,最简单的方法是尽可能地减少错误窗口。
在这些情况下,我的个人工作流程:
带有小叉子的,从一开始就明显地改变了模型:
带有大叉的,其中的更改并不总是明显的和/或将再次更改:
https://stackoverflow.com/questions/29747536
复制相似问题