GitLab - игнорировать определенные файлы в целевой ветке

Я использую GitLab в своем проекте, и у меня есть довольно специфический рабочий процесс. У меня есть две ветки " Dev" и " Release", как показано ниже. Когда я отправляю запрос слияния из Dev на Release, файлы конфигурации также переписываются с файлами ветки Dev.

введите описание изображения здесь

Но в идеале файлы конфигурации должны быть разными для обеих этих ветвей. Я попытался использовать merge=ours. Но это не помогло моей цели, поскольку оно не будет отменено до тех пор, пока не возникнет конфликт в файлах конфигурации. Я не хочу добавлять эти файлы в .gitignore, так как любые изменения этих файлов не будут выполняться в ветке Dev. Может ли кто-нибудь посоветовать мне, как это сделать?

Ответ 1

Вы можете просто убедиться, что ваши файлы конфигурации для dev и master называются по-разному, с их собственной историей. Таким образом, слияние никогда не перезапишет ничего.

Затем вы можете выполнить версию и отслеживать:

  • a config.tpl (файл шаблона со значениями заполнителя).
  • два конфигурационных файла, один для dev, один для мастера
  • a script может взять файл конфигурации и файл шаблона и создать файл config (который остается невоспроизводимым, закрытым)
  • a .gitignore, который игнорирует полученный сгенерированный файл config
  • a .gitattribute Объявление фильтра содержимого smudge (см. ниже)

Генерация файла конфигурации автоматизирована с помощью фильтра фильтра содержимого, используя .gitattributes.

/img/cad554a8ee472a7c2a79d6d246795d98.png
(изображение из "Настройка Git - Git Атрибуты" из Pro Git book "))

Как только вы объявите, что этот драйвер содержимого в вашей локальной конфигурации, он автоматически, на git checkout, сгенерирует ваш файл config для вас.
Полный пример в Лучшая практика - Git + Автоматизация сборки - Сохранение конфигураций отдельно.