У нас есть несколько групп разработчиков в разных офисах, и им нужны разные значения для нескольких параметров конфигурации в файлах web.config
и app.config
наших проектов.
Мы хотели бы, чтобы эти файлы конфигурации были проверены с помощью разумного набора значений по умолчанию, так что, проверяя ветвь магистрали/мастера, у вас есть что-то работающее без необходимости копаться для файлов конфигурации.
Исторически мы использовали Subversion, и в частности TortoiseSVN, и это обеспечило простой способ управления локальными изменениями: мы просто добавили эти файлы в автоматический список TortoiseSVN ignore-on-commit
. Это предотвращает случайную проверку этих файлов, так как тогда вам нужно специально их выбирать, чтобы включить их в проверку (и вы можете убедиться, что вы проверяете значительные изменения, а не локальный-config-шум). Основным недостатком этого подхода является то, что файлы конфигурации всегда выглядят "измененными", поэтому невозможно сразу узнать, есть ли у вас локальные изменения.
Мы хотим перейти на Git, и я пытаюсь найти наилучший подход.
Во-первых, что уже есть в других ответах StackOverflow:
Вариант 1: проверьте файлы xxx.sample и .gitignore фактические файлы конфигурации. Это рекомендуется, например, в этом ответе. Основная проблема, которую я вижу в этом, заключается в том, что изменения в конфигурационном файле легко забываются в двух разных точках: коммиттер может легко пропустить изменения, которые им нужно добавить в файл .sample
, и потребители (например, сервер непрерывной интеграции) могут легко пропустить изменения, которые им необходимо включить из файла .sample
в их локальный файл конфигурации. Таким образом, в принципе, это не похоже на очень хорошее решение.
Вариант 2: наличие файла xxx.defaults и файла конфигурации xxx.local.gitignored, который переопределяет любые параметры, которые он определяет. Это предлагается, например, . Проблема в том, что мы работаем со стандартными поставщиками конфигурации .Net. Я действительно не хочу, чтобы мы реализовали целую новую структуру настроек загрузки, когда Mirosoft уже выполнила всю работу. Кто-нибудь знает способ получить файлы app.config и web.config для ссылки на необязательные файлы локального переопределения?
Вариант 3: Попросите разработчиков сохранить локальные ветки, а затем всегда проверяйте в вишнях или переустановленных ветвях в мастер, чтобы всегда обходить/избегать нежелательных коммитов в своей локальной ветке. Это предлагаемый как возможный рабочий процесс здесь, и хотя я ценю его чистоту с точки зрения отслеживания изменений (все проверено), он вводит значительную сумму необходимых накладных расходов каждый сеанс; это большая боль!
Вариант 4: установите файлы конфигурации, но пометьте их --assume-unchanged
: здесь предлагается возможная опция здесь; насколько я могу сказать, что он очень похож по духу на список изменений ignore-on-commit
в TortoiseSVN, за исключением того, что у вас нет видимости для этих "скрытых" измененных файлов в процессе фиксации; Например, TortoiseGit показывает файл с "измененным" наложением значков, но в диалоговом окне фиксации файл вообще не отображается. Это кажется немного пугающим, снова очень легко забыть проверить изменения.
Учитывая эти параметры, которые все я нашел, я действительно надеюсь на способ "включить" локальный файл конфигурации в/над зарегистрированным файлом app.config/web.config и перейдите с опцией 2; кто-нибудь знает способ сделать это или другие варианты, которые мне не хватает? (Я слабо соблазнился рассмотрением настраиваемого шага предварительной сборки Xml...)
Я должен был упомянуть ранее, мы все еще на VS2008, поэтому Configuration Transforms недоступны.
UPDATE: (удалено, было неправильно)
ОБНОВЛЕНИЕ 2: Я удалил свое предыдущее обновление и ответ, это было глупо/не работало. Я не понимал, что после слияния "наше" следующее слияние в другом направлении возвращает "оригинальные" версии этих файлов (перезаписывает изменения локальных ветвей); Если вы заинтересованы, просмотрите историю изменений. Этот вопрос так же открыт, как и всегда.