Как я могу отслеживать конфигурационные файлы для конкретной системы в репо/проекте?

У меня есть проект ruby, и узел базы данных и порт могут отличаться от dev и production. Мне нужен способ получить разные значения для этих сценариев для двух сред.

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

Как решить эту проблему с помощью git?

Ответ 1

Я бы рекомендовал использовать:

  • конфигурационный файл шаблона (файл с именем переменной вместо значения узла и порта)
  • a script может заменить эти имена переменных соответствующими значениями в зависимости от среды (обнаруженной script)

Решение Git представляет собой git драйвер фильтра атрибутов (см. также GitPro book).

Драйвер фильтра состоит из команды clean и команды smudge, любая из которых может быть оставлена ​​неуказанной.
На checkout, когда указана команда smudge, команда передает объект blob со своего стандартного ввода, а его стандартный вывод используется для обновления файла рабочей папки.
Аналогично, команда clean используется для преобразования содержимого файла worktree при регистрации.

Таким образом, script (управляемый с помощью Git), на который ссылается smudge, может заменить все переменные значениями, зависящими от environement, в то время как чистый script восстановит его содержимое в нетронутом файле конфигурации.

clean smudge

Когда вы заказываете репозиторий Git в среде prod, процесс smudge будет создавать файл файл, подобный prod, в полученном рабочем дереве.