Git лучшая практика для конфигурационных файлов и т. Д. - PullRequest
37 голосов
/ 18 февраля 2012

Я все еще новичок во всем, git, и мне было интересно, что лучше всего делать с файлами конфигурации.Моему локальному серверу разработки нужны другие значения конфигурации, чем моему живому, так как я могу остановить его, выталкивая / вытягивая эти файлы?

Ответы [ 4 ]

42 голосов
/ 18 февраля 2012

Используйте символические ссылки.

Возьмите пример, где у вас есть файл конфигурации с именем "config.ini".В рабочем каталоге вашего репозитория git вы должны сделать следующее:

  1. Создать версию файла конфигурации с именем "config-sample.ini".Это файл, над которым вы будете выполнять всю свою работу.

  2. Создайте символическую ссылку между "config.ini" и "config-sample.ini".

    ln -s config-sample.ini config.ini
    

    Это позволяет всему вашему коду указывать на "config.ini", даже если вы действительно поддерживаете "config-sample.ini".

  3. Обновите ваш .gitignore, чтобы предотвратить "config.ini "из хранилища.То есть добавьте строку «config.ini»:

    echo "config.ini" >> .gitignore
    
  4. (Необязательно, но настоятельно рекомендуется) Создайте файл .gitattributes со строкой «config.ini export-ignore».

    echo "config.ini export-ignore" >> .gitattributes
    
  5. Выполнить кодирование и развернуть ....

  6. После развертывания кода в рабочей среде скопируйте «образец конфигурации».ini "файл в" config.ini ".Вам нужно будет внести любые корректировки, необходимые для настройки производства.Вам нужно будет сделать это только при первом развертывании и каждый раз, когда вы изменяете структуру вашего конфигурационного файла.

Вот несколько преимуществ:

  • Структура вашего файла конфигурации поддерживается в репозитории.

  • Разумные значения по умолчанию могут поддерживаться для любых параметров конфигурации, которые одинаковы между dev и production.

  • Ваш "config-sample.ini" будет обновляться всякий раз, когда вы запускаете новую версию в производство.Это значительно упрощает поиск любых изменений, которые необходимо внести в файл «config.ini».

  • Вы никогда не перезапишете рабочую версию "config.ini".(Необязательный шаг 4 с файлом .gitattributes дает дополнительную гарантию того, что вы никогда не будете экспортировать свой файл «config.ini», даже если вы случайно добавите его в репозиторий.)

(Это прекрасно работает для меня на Mac и Linux. Я предполагаю, что в Windows возможно соответствующее решение, но кто-то другой должен будет это прокомментировать.)

9 голосов
/ 10 августа 2017

Доступны различные варианты:

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. Разные ветки

Вы можете сохранить настройки по умолчанию в своей основной ветке.

Разветвите разные ветви для каждой вашей среды.

Каждая ветвь может изменять конфигурационный файл по умолчанию при необходимости.

Когда ваша главная ветвь обновится, объедините ее с вашими конкретными ветками.

Лично я не рекомендую такой подход. Я думаю, что это труднее поддерживать.

5 голосов
/ 18 февраля 2012

Git будет игнорировать файлы, которые вы явно не добавляете, поэтому проверка разных веток просто оставляет их в том месте, где они находятся в структуре каталогов, так как другие файлы меняются вокруг них.Если вы добавите свой файл конфигурации в файл .gitignore в корне вашего репозитория (возможно, придется его создать, дополнительная информация здесь ), тогда вы все равно сможете выполнять команды для всех файлов, например

git add .

если хотите и не переживайте по этому поводу.

3 голосов
/ 18 февраля 2012

Лучший способ - создать файл с именем .gitignore и вставить файлы / папки, которые вы хотите игнорировать.

Таким образом, вы можете сделать git add * каждый раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...