Git продвижение / слияние подход со сторонним продуктом - PullRequest
0 голосов
/ 17 октября 2018

Я понимаю, что это очень специфический вопрос, и некоторые вещи могут даже вздрогнуть закаленного пользователя git, но потерпите меня…

Мы реализуем виртуальное хранилище данных, которое генерирует метаданные (SQL-как код).Продукт ( Denodo ) может быть подключен к VCS (например, git) для сохранения изменений под контролем версий.

Внутренне существует виртуальных баз данных , и Denodo также организуетего код в папки, соответствующие этим базам данных.Таким образом, в git вы получите что-то вроде:

Root
 \- Orders
 \- Customers
 \- Invoices

Под каждой из этих папок базы данных будет несколько файлов кода, составляющих метаданные.

Передача и отправкакод в Denodo всегда выполняется на уровне базы данных , хотя в git-репо такого различия нет и фиксация является глобальной для репо.

Разработчики работают локально над своими отдельными базами данных и будутпериодически совершать изменения кода.Все эти изменения перенесены на сервер разработки.Пока все хорошо.

Рано или поздно, изменения, внесенные в разработку, должны найти свой путь в QA и производство.Однако, если бы мы слили текущий статус из нашей ветви разработки (develop) в нашу ветвь QA (release), мы могли бы получить некоторые нежелательные (ломающиеся) изменения, которые еще не были готовы к прайм-тайм.

Таким образом, нам нужно вишня .И используя git log, мы можем видеть, какие коммиты еще предстоит повысить до QA.Но если мы выберем отдельные коммиты из ветви develop в ветку release, они получат новый SHA, и в следующий раз, когда мы сделаем сравнение git log, ранее выбранные коммиты все равно будутПоявляются

Также помните, что хранилище организовано по базе данных.Это также означает, что:

  • Я получаю отчет о коммитах, сделанных в каждой папке, связанной с базой данных
  • Решите, какой последний коммит для каждой базы данных будет повышен
  • Для каждогобаза данных: вишня выбрать самый старый коммит с момента последнего слияния до выбранного на предыдущем шаге.

Этот диапазон не обязательно является последовательным.У вас может быть что-то вроде этого (упорядочено по дате).

| To be promoted | Commit | Database  | Change              |
|----------------|--------|-----------|---------------------|
|                | da39a3 | Orders    | Created views       |
|        X       | ee5e6b | Customers | Bug fix             |
|        X       | 4b0d32 | Invoices  | Removed data source |
|                | 053e2d | Invoices  | Updated credentials |
|        X       | 956018 | Orders    | Created data source |

В этом примере мы бы выбрали коммиты ee5e6b (клиенты), 4b0d32 & 053e2d (счета) и956018 (заказы).Причина, по которой я должен выбрать 053e2d также для заказов, заключается в том, что последние метаданные могут основываться на ранее внесенных изменениях (из-за зависимостей внутри базы данных).Между базами данных практически отсутствуют зависимости.

Требования:

  • Каждый раз, когда запланировано повышение, я должен иметь возможность представитьобзор коммитов, которые находятся в разработке, но не в QA.

  • Я должен иметь возможность выбирать определенные (вплоть до) изменения на уровне базы данных, которые можно объединить с release ветка для продвижения в QA.

Ограничения:

  • Коммиты происходят изнутри Denodo и поддержка VCS не поддерживается.не все так здорово (например, смена веток на самом деле не поддерживается).Это также означает, что мы не можем реализовать ветки feature , чтобы изолировать критические изменения или долгосрочное развитие.

  • Пока мы оцениваем, что продвигать на уровне базы данныхэти коммиты не последовательные.

Приношу свои извинения за затянувшийся вопрос, но это не совсем типичный сценарий и ему нужно немного больше контекста.Я также не специалист по мерзавцам (не слишком далеко), поэтому, пожалуйста, никаких вил или факелов.Спасибо!

...