Я использую 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
.
(изображение из "Настройка Git - Git Атрибуты" из Pro Git book "))
Как только вы объявите, что этот драйвер содержимого в вашей локальной конфигурации, он автоматически, на git checkout
, сгенерирует ваш файл config
для вас.
Полный пример в Лучшая практика - Git + Автоматизация сборки - Сохранение конфигураций отдельно.