Как управлять файлами конфигурации при совместной работе?
Я пишу короткую script с несколькими простыми переменными в верхней части страницы. Я хочу работать с ними с другом, но мы не знаем, как управлять переменными, которые необходимо изменить, каждый раз потянув за одного из нас, добавив ненужный нежелательный элемент в состояние git. Я думал о создании разных именных ветвей для каждого из нас, и тогда у мастера будет только пример использования имен пользователей, но кажется глупым делать все, что делает дополнительную работу слиянием. Мы могли бы передать переменные в параметры script как это, но это нежелательно, и не разделять его на другой отдельный файл конфигурации. Было бы здорово иметь что-то вроде .gitignore, но только игнорировать несколько строк в файле.
Как это можно элегантно управлять? Как обычно эта проблема управляется?
Ответы
Ответ 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
Вы можете создать дополнительный репозиторий для локальных настроек и символизировать файлы/папку в своем проекте.
Подробнее см. мой ответ в другом потоке.