Я работаю над довольно сложным проектом Django (более 50 моделей) с некоторой сложной логикой (множество различных рабочих процессов, представлений, сигналов, API-интерфейсов, фоновых задач и т.д.). Позвольте называть это project-base
. В настоящее время используется миграция Django 1.6 + South и немало других сторонних приложений.
Теперь одно из требований - создать вилку этого проекта, которая добавит некоторые поля/модели здесь и там, а также дополнительную дополнительную логику. Позвольте называть это project-fork
. Большая часть дополнительной работы будет поверх существующих моделей, но также будет несколько новых.
По мере того, как project-base
продолжает развиваться, мы хотим, чтобы эти функции также попадали в project-fork
(так же, как rebase/merge в git -land). Дополнительные изменения в project-fork
не будут объединены обратно в project-base
.
Что может быть наилучшим возможным способом для этого? Вот некоторые из моих идей:
-
Использование юга объединяется в
project-fork
, чтобы поддерживать его в актуальном состоянии с последними изменениями отproject-base
, как описано здесь. Используйте сигналы и любые другие средства, необходимые для того, чтобы сохранить новую логику отproject-fork
настолько свободно, насколько это возможно, чтобы избежать любых потенциальных конфликтов. -
Не изменяйте ANY из исходных моделей
project-base
и вместо этого создавайте новые модели в разных приложениях, которые ссылаются на старые модели (т.е. с помощьюOneToOneField
). Дополнительная логика может оказаться в старых и/или новых приложениях. -
Ваша идея здесь, пожалуйста:)
Я бы пошел с вариантом 1, поскольку он кажется менее сложным в целом, но может подвергнуть больший риск. Вот как я это вижу:
Миграции на project-base
:
- 0001_project_base_one
- 0002_project_base_two
- 0003_project_base_three
Миграции на project-fork
:
- 0001_project_base_one
- 0002_project_fork_one
После слияния миграции будут выглядеть следующим образом:
- 0001_project_base_one
- 0002_project_base_two
- 0002_project_fork_one
- 0003_project_base_three
- 0004_project_fork_merge_noop (добавляется для слияния изменений в обоих проектах)
Есть ли подводные камни, использующие этот подход? Есть ли лучший способ?
Спасибо за ваше время.