Доступны различные варианты:
1. Зафиксируйте файл конфигурации по умолчанию, но разрешите локальный файл конфигурации
Добавьте файл default.conf
в ваш репозиторий Git.
Ваше приложение сначала ищет app.conf
, но если оно не существует, оно использует default.conf
.
Пользователи, которым требуется конфигурация не по умолчанию, могут скопировать default.conf
в app.conf
и затем отредактировать ее.
Пользователи не должны фиксировать app.conf
в хранилище, поскольку разные пользователи могут захотеть разные настройки в этом файле. (Так что вы должны положить app.conf
в свой .gitignore
.)
С поворотом (рекомендуется)
Ваше приложение всегда загружает default.conf
, но если присутствует app.conf
, оно будет копировать настроек из app.conf
поверх настроек из default.conf
.
Этот поворот имеет несколько преимуществ:
app.conf
нужно только удерживать отличия от значений по умолчанию, делая его меньше и проще в обслуживании.
Когда приложение изменяется, новые значения по умолчанию, добавленные к default.conf
, будут доступны приложению, и пользователю не нужно будет копировать их в app.conf
.
Это решение очень похоже на ответ Алана У. Смита, приведенный выше, с небольшим отличием: если приложение может запуститься без наличия файла app.conf
, оно будет запущено из коробки. Однако это добавляет сложности к коду запуска приложения.
Предложение было одним из немногих, сделанных Линусом Торвальдсом в списке рассылки git или kernel, но я не смог найти его сегодня.
2. Используйте переменные окружения и / или аргументы командной строки
Вы можете использовать переменную окружения, чтобы указать вашему приложению определенный файл конфигурации. Вы можете запустить свое приложение так:
CONFIG_FILE=test.conf ./start-app
или альтернативно:
./start-app --config=test.conf
Это означает, что вы можете иметь несколько конфигурационных файлов development.conf
, staging.conf
и production.conf
. Когда вы запускаете приложение, вы указываете, какой файл конфигурации использовать.
Разработчики, которые хотят поэкспериментировать с другой конфигурацией, могут указать свой собственный файл, например, custom.conf
.
Вы также можете использовать переменные окружения или аргументы командной строки для переопределения определенных настроек:
./start-app --config=default.conf --db-url=... --debug-level=5
3. Разные ветки
Вы можете сохранить настройки по умолчанию в своей основной ветке.
Разветвите разные ветви для каждой вашей среды.
Каждая ветвь может изменять конфигурационный файл по умолчанию при необходимости.
Когда ваша главная ветвь обновится, объедините ее с вашими конкретными ветками.
Лично я не рекомендую такой подход. Я думаю, что это труднее поддерживать.