Подтвердить что ты не робот

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

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

Как это можно элегантно управлять? Как обычно эта проблема управляется?

4b9b3361

Ответ 1

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

Имейте пример файла конфигурации в git

Здесь вы бы сохранили файл config.sample в git в качестве примера, но приложение фактически использовало бы значения в файле config, который находится в .gitignore. Затем приложение выдаст ошибку, если не присутствует config. Вы должны помнить об изменении значений в файле образца при добавлении новых переменных конфигурации в свой личный файл config. В этом случае также неплохо, чтобы ваше приложение проверило, что все необходимые параметры конфигурации фактически установлены, в случае, если кто-то забыл обновить свой файл config после внесения изменений в образец.

Имеет файл значений по умолчанию в git

Вы сохраняете файл config.defaults в git, который, насколько возможно, имеет разумные значения конфигурации по умолчанию. Ваша первая конфигурация ваших приложений из config.defaults, а затем из config (которая находится в .gitignore), чтобы, возможно, переопределить любые значения по умолчанию. С помощью этого метода, как правило, вы бы не допустили ошибку для config не существовать, поэтому приложение может работать из коробки для людей, которые не потрудились создать config.

Использование одного файла конфигурации с параметром -assume-неизменным

Третья возможность, которую я бы не рекомендовал в этом случае лично, заключалась бы в том, чтобы иметь один файл конфигурации, который был зафиксирован в git, но использовать git update-index --assume-unchanged <FILE>, чтобы сообщить git игнорировать изменения к нему. (Это описано далее в этом полезном сообщении в блоге.) Это означает, что ваши локальные изменения в файле конфигурации не будут переданы с помощью git commit -a или отображаться в git status.

Ответ 2

В моем случае у меня есть переменные "config" в отдельном (маленьком) файле, как и все остальные разработчики в команде. Там хранятся такие вещи, как мое местоположение базы данных и т.д. Мы помещаем имя этого файла в наш .gitignore, чтобы оно не контролировалось версией, а проверило файл "sample_config", чтобы новички могли сделать копию и использовать ее в своих целях.

Ответ 3

Python/Django-специфическое решение состоит в том, чтобы иметь общие файлы settings.py, которые были проверены в репозитории, и локальный settings_local.py, импортированный в конце settings.py, который переопределяет некоторые параметры с помощью конкретных машин значения.

Ответ 4

Другие варианты (не изящные, но могут быть полезны):

  • Используйте git stash и git stash pop для вашего конфигурационного файла
  • Имейте ветку с именем, скажем, config, которая имеет локальный файл конфигурации, а затем используйте git checkout config <your config file>

Второй вариант хорош, если вам нужно сохранить локальные изменения конфигурации в репо (где-то).

Ответ 5

Вы можете создать дополнительный репозиторий для локальных настроек и символизировать файлы/папку в своем проекте.

Подробнее см. мой ответ в другом потоке.