Как запретить Git объединять определенные ветки

Мне нужна поддержка 3 версий моей программы. Где большинство файлов

Совместное (общее), но несколько файлов содержат разный контент для каждой версии.

Я, вероятно, буду использовать 4 ветви A,B,C,D в Git.

Форма примера проекта Мороженое:

____________________________________________________
Cup.txt: { Waffle cup } – common file for all version

Filling.txt { banana } - special file for B version
Filling.txt { strawberries } - special file for C version
Filling.txt { vanilla } - special file for D version
____________________________________________________

A - ветка, подходящая только для глобальных файлов (Cup.txt)

B, C, D - ветка подходит только для файла Filling.txt.

Для этой стратегии мне нужно разрешить слияние только в одном направлении: A => B,C,D

Мой вопрос - как запретить слияние веток B, C, D с A в Git?

как запретить слияние обратного направления

2 ответа

Что касается исходного кода, лучше всего избегать сложной стратегии слияния и изменять PrintBill для того, чтобы:

  • отдельный контент, специфичный для клиента A и B
  • создать правильный исполняемый файл для клиента A и клиента B, выбрав правильный источник

Идея та же, что и изначально написанная ниже: избегайте любой сложной стратегии слияния.

Теперь, если такой рефакторинг невозможен, вы можете попытаться объявить драйвер слияния, но это не всегда будет вызываться (только в случае конфликтов).


Другой подход заключается в том, чтобы избежать версий Filling.txt (таким образом, больше нет головной боли стратегии слияния).

Вы можете:

  • версия 3 разных файла со значениями для каждой среды
  • настроить smudge скрипт ( драйвер фильтра содержимого объявляется в .gitattributes файл), который автоматически при оформлении заказа генерирует, в зависимости от извлеченной ветви, право Filling.txt

мазаться

Во-первых, я не думаю, что это действительно то, что вы хотите сделать.

Вы хотите запретить слияние B-специфичных вещей в A.

Но слияние общих исправлений ошибок из B в A должно быть хорошо.

Таким образом, вы должны хранить B-специфичные вещи в отдельных файлах.

В любом случае, вам нужно что-то вроде перехвата git pre-receive на "центральном сервере", который, я думаю, проверяет и предотвращает добавление "запрещенных файлов".

Но учтите, что если вы храните специфичные для B вещи в отдельных файлах, вам даже не нужно использовать git-ветки для решения этой проблемы. Вы можете просто использовать отдельные проекты с зависимостями между ними.

Другие вопросы по тегам