В настоящее время мы разрабатываем приложение, использующее базу данных.
Каждый раз, когда мы обновляем структуру базы данных, мы должны предоставить script для обновления базы данных от предыдущей версии до текущей.
Итак, в базе данных есть номер, который дал нам текущую версию, а затем наше программное обеспечение делает обновление, когда мы хотим использовать "старую" базу данных.
Проблема, с которой мы сталкиваемся, - это когда у нас есть ветки:
Когда мы создаем новую большую функцию, которая не будет доступна для пользователей (и не включена в выпуски), мы создаем ветку.
Основная ветвь (соединительная линия) будет объединена регулярно, чтобы гарантировать, что для создания бранча будут исправлены самые последние ошибки.
Вот несколько иллюстраций:
Проблема связана с нашими скриптами обновления. Они обновляются с предыдущей версии до текущей, а затем обновляют номер версии базы данных.
Представьте, что при создании ветки мы имеем версию DB 17.
Затем мы создаем ветвь и делаем изменения в DB внешней линии. Теперь у DB есть версия 18.
Затем мы делаем изменение db на ветке. Поскольку мы знаем, что уже была новая версия "18", мы создаем версию 19 и обновление 18- > 19.
Затем соединительная линия объединяется в ветку.
В этот самый момент у нас могут быть некоторые обновления, которые никогда не будут выполняться.
Если кто-то обновил свою базу данных до слияния, его база данных будет отмечена как имеющая версию 19, обновление 17- > 18 никогда не будет выполнено.
Мы хотим изменить это поведение, но мы не можем найти, как:
Наши ограничения:
- Мы не можем внести все изменения в одну ветвь
- Иногда у нас есть не более двух ветвей, и мы можем только объединиться с соединительной линии до ветки функции до тех пор, пока функция не будет завершена.
Что мы можем сделать для обеспечения непрерывности между нашей ветвью базы данных?