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