Конфигурирование обмена файлами в Mercurial и VS - PullRequest
2 голосов
/ 19 марта 2012

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

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

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

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

Ответы [ 3 ]

1 голос
/ 19 марта 2012

Мое решение состоит в том, чтобы исключить app.config из VCS, чтобы предотвратить случайные фиксации к нему. Мы создали app.example.config, который зарегистрирован. Событие перед сборкой проверяет, существует ли файл app.config и не копирует ли он .template в файл .config перед компиляцией базы кода. Это гарантирует, что на сервере сборки есть рабочий файл конфигурации, который содержит основные настройки для всех сред.

Пример события PRe-build в конфигурации вашего проекта:

REM copy .example files to .config files if needed
IF NOT EXIST "$(projectDir)\App.Config" IF EXIST "$(projectDir)\app.example.config" COPY "$(projectDir)\app.example.config" "$(projectDir)\App.Config"
IF NOT EXIST "$(projectDir)\Web.Config" IF EXIST "$(projectDir)\Web.example.config" COPY "$(projectDir)\Web.example.config" "$(projectDir)\Web.Config"
IF NOT EXIST "$(projectDir)\ConnectionStrings.Config" IF EXIST "$(projectDir)\ConnectionStrings.example.config" COPY "$(projectDir)\ConnectionStrings.example.config" "$(projectDir)\ConnectionStrings.Config"
IF NOT EXIST "$(projectDir)\Local.Config" IF EXIST "$(projectDir)\Local.example.config" COPY "$(projectDir)\Local.example.config" "$(projectDir)\Local.Config"
0 голосов
/ 24 марта 2012

Вот еще один ответ, аналогичный принятому Марком , но с использованием задачи <Copy> в файле .csproj, который вы, по-видимому, искали:

как игнорировать файлы в печи / ртути, используя черепаху hg ", которые являются частью хранилища"

0 голосов
/ 19 марта 2012
  1. Конфиг в репо содержит данные для TeamCity
  2. Разработчики имеют MQ и патч в MQ-стеке для преобразования стандартного xml в локальный
  3. Изменен базовый xml, требуется отредактировать (перебазировать) патч и удалить конфликты
...