在Django forks维持南迁

在Django forks维持南迁,django,django-models,merge,django-south,rebase,Django,Django Models,Merge,Django South,Rebase,我正在从事一个相当复杂的Django项目(50多个模型),其中包含一些复杂的逻辑(许多不同的工作流、视图、信号、API、后台任务等)。让我们称之为项目库。目前正在使用Django 1.6+South migrations和许多其他第三方应用程序 现在,其中一个需求是创建这个项目的分支,它将在这里和那里添加一些字段/模型,并在此基础上添加一些额外的逻辑。让我们称之为项目fork。大部分额外工作将在现有模型的基础上进行,但也会有一些新模型 随着projectbase的不断开发,我们希望这些特性也能进

我正在从事一个相当复杂的Django项目(50多个模型),其中包含一些复杂的逻辑(许多不同的工作流、视图、信号、API、后台任务等)。让我们称之为
项目库
。目前正在使用Django 1.6+South migrations和许多其他第三方应用程序

现在,其中一个需求是创建这个项目的分支,它将在这里和那里添加一些字段/模型,并在此基础上添加一些额外的逻辑。让我们称之为
项目fork
。大部分额外工作将在现有模型的基础上进行,但也会有一些新模型

随着
projectbase
的不断开发,我们希望这些特性也能进入
projectfork
(很像git-land中的重基/合并)。
project fork
中的额外更改将不会合并回
project base

实现这一目标的最佳方式是什么?以下是我的一些想法:

  • 如前所述,在
    project fork
    中使用South merges可使其与
    project base
    中的最新更改保持同步。使用信号和任何其他必要手段,使新逻辑尽可能松散地耦合在
    project fork
    中,以避免任何潜在冲突

  • 不要修改任何原始的
    项目基础
    模型,而是在引用旧模型的不同应用程序中创建新模型(即使用
    OneToOneField
    )。额外的逻辑可能会出现在旧的和/或新的应用程序中

  • 你的想法是:)

  • 我会选择选项1,因为它整体上看起来不那么复杂,但可能暴露出更大的风险。以下是我将如何看待它的发生:

    项目库上的迁移

    • 0001_项目_基础_一
    • 0002\u项目\u基地\u二
    • 0003\u项目\u基地\u三
    项目fork上的迁移

    • 0001_项目_基础_一
    • 0002\u项目\u分叉\u一
    合并后,迁移将如下所示:

    • 0001_项目_基础_一
    • 0002\u项目\u基地\u二
    • 0002\u项目\u分叉\u一
    • 0003\u项目\u基地\u三
    • 0004\u项目\u分叉\u合并\u noop(添加到合并来自两个项目的更改中)
    使用这种方法是否存在陷阱?有更好的办法吗

    感谢您抽出时间。

    南方官方工作流程: 南方官方建议尝试使用
    --merge
    标志:

    这显然不会在所有情况下都有效,但根据我的经验,它在大多数情况下都有效

    陷阱:

    • 对同一模型的多个更改仍可能中断
    • 重复的改变会破坏事物
    “更好”的方法通常是避免同时更改相同的模型,最简单的方法是尽可能减少错误窗口

    在这些情况下,我的个人工作流: 小叉子的型号从一开始就有明显变化:

  • 讨论fork需要进行哪些模型更改
  • 尽快将这些更改应用于两个/所有分支,以避免冲突
  • 在叉子上工作
  • 合并不提供新迁移的分支
  • 对于变化不明显和/或将再次发生变化的大叉:

  • 在尽可能与最新的master/development分支保持同步的同时,进行正常的fork和development工作
  • 在重新合并之前,请扔掉fork中的所有模式迁移
  • 合并主控/开发中的所有更改
  • 重新创建所有需要的架构更改
  • 合并以开发/掌握