Мы используем git для большинства веб-приложений, которые мы создаем в нашем магазине, и хотя сами приложения используют различные технологии (PHP, Rails и т. Д.), У нас обычно есть промежуточный и рабочий сервердля каждого сайта.Как правило, эти серверы имеют разные наборы учетных данных базы данных, а также различные параметры конфигурации на основе среды (например, кэширование).Наш рабочий процесс обычно включает в себя поддержку двух веток git на проект: master, который отражает рабочий сервер, и staging, который отражает staging.Новые функции разрабатываются на стадии подготовки (или дочерней ветви) и объединяются с главной при завершении и развертывании.
У меня вопрос относительно наилучшего способа поддержки файлов конфигурации, которые являются ветвью и средой-конкретный.Я видел ответы на подобные вопросы здесь и здесь , и ни один из них на самом деле не удовлетворяет.Основными двумя подходами, по-видимому, являются: а) использование исключения .gitignore, чтобы оставить файлы конфигурации вне сферы действия git, или б) написание рефлексивного кода, учитывающего среду, который определяет, например, какие учетные данные базы данных использовать на основе имени хоста.Моя проблема с а) в том, что он позволяет только одному набору файлов конфигурации существовать в кодовой базе (независимо от текущей ветви), поэтому файлы конфигурации другой среды теряются.b) с другой стороны, кажется, что требуется неоправданная модификация кодовой базы таким образом, который не имеет отношения к функциональности приложения.
В идеале, я бы хотел "заблокировать" конфигурациюфайлы в определенной ветви, так что всякий раз, когда я извлекаю master, я получаю файлы конфигурации master, а всякий раз, когда я извлекаю staging, я получаю файлы config размещения.Кроме того, объединение промежуточного уровня в главное не должно влиять на основные файлы конфигурации.На сегодняшний день мы имеем дело с этим, имея папки, содержащие специфические для среды файлы конфигурации за пределами git-корня, и вручную перемещая соответствующие файлы в базу кода при развертывании, но это, конечно, излишне хакерский (и потенциально опасный).
Есть ли способ сделать это с помощью git?
Спасибо за внимание!