Как обращаться с SQL Server CE в системе контроля версий? - PullRequest
2 голосов
/ 02 марта 2012

Мне любопытно, как мы должны обращаться с SQL Server Compact в нашем контроле исходного кода Git. Каждый раз, когда разработчик изменяет данные, возникает конфликт двоичного слияния. Есть ли способ сохранить развитие этой базы данных в синхронизации? Если два разработчика снимают исходный код и изменяют схему, то один из них потеряет свои изменения, поскольку все, что вы действительно можете сделать, это принять серверную версию файла sdf или локальную версию. Что рекомендуется для этого сценария? Преимущество использования SQL Server CE в этом решении состоит в том, что люди могут снять свежую копию проекта, нажать F5, и они отправятся в гонку. Здесь что-то среднее?

Меня беспокоит не столько синхронизация данных, сколько модификации схемы базы данных. Конфликты приводят к «моему» или «вашему» сценарию, в отличие от файлов кода, в которых вы можете использовать инструмент сравнения для объединения двух версий.

Ответы [ 4 ]

2 голосов
/ 02 марта 2012

Вместо создания вашей схемы в SDF, вы можете написать операторы SQL, которые создают и заполняют базу данных, и проверяют их в. SQL - это текст, который можно объединять и сравнивать с помощью существующих инструментов.Вам понадобится команда предварительной сборки, чтобы запустить SQL и воссоздать вашу базу данных.

2 голосов
/ 02 марта 2012

Я бы обычно подходил к этому так же, как при использовании полноценного сервера sql.Каждый разработчик должен иметь копию своей собственной базы данных, которая не помещается в систему контроля версий.

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

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

0 голосов
/ 02 марта 2012

Я столкнулся с этой же проблемой. Ну, замените git на svn и CE на стандартную версию ...

Наша установка такова, что у каждого разработчика есть собственная копия необходимых баз данных с централизованными версиями dev, QA и prod. Каждый сервер (примечание: каждый сервер) хранится в хранилище индивидуально.

Я использую этот код для сценариев объектов, а затем пакетные файлы для фиксации в репо. Хотя в статье обсуждается решение для SVN, вы должны очень легко заменить его на соответствующие вызовы git.

Запускайте это каждую ночь на каждом компьютере с экземпляром базы данных, и Боб - ваш дядя. Ура!

0 голосов
/ 02 марта 2012

похожая проблема различна, например пути для разных сред разработки, которые я обычно решаю так:

Я добавляю имя хоста к ключу как:

<add key="ImportPath_MyCoolUbuDev" value="d:\import" />
<add key="ImportPath_alexf" value="m:\dev\p1\import" />

возможнодать вам идею.

Не знаю, возможно ли, чтобы каждый мог хранить свою собственную копию локально (названную по-разному) и перезаписывать ее только тогда, когда он хочет обновить себя.

...