Страницы

Поиск по вопросам

Показаны сообщения с ярлыком migration. Показать все сообщения
Показаны сообщения с ярлыком migration. Показать все сообщения

суббота, 7 марта 2020 г.

Переезд с mercurial на git

#git #mercurial #migration #hg


Здравствуйте!
Есть большая проблема с переездом на git.
Почему-то переезжает только одна ветка, а их полно...
Использую TortoiseHg с плагином hggit. В hgrc меняю только path.
Прошу помочь в этом вопросе.
    


Ответы

Ответ 1



Для пингвина лучше сделать вот так: Есть инструмент hg-fast-export. Его можно найти здесь: git clone http://repo.or.cz/r/fast-export.git /tmp/fast-export Нужно получить mercurial репу: hg clone /tmp/hg-repo Далее нужно создать файл соответствия авторов. cd /tmp/hg-repo hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors В /tmp/authors будет примерно следующее содержимое: bob bob@localhost bob bob jones company com> Bob Jones Joe Smith В примере выше, один и тот же человек (Боб) вносил изменения под пятью различными именами, лишь одно из которых правильное, а одно и вовсе не соответствует формату Git. hg-fast-export позволяет быстро исправить ситуацию, добавив ={new name and email address} к каждой строке, которую мы хотим изменить; чтобы оставить имя как есть, просто удалите нужные строки. Если же все имена выглядят хорошо, этот файл и вовсе не потребуется. В нашем примере мы хотим чтобы данные выглядели так: bob=Bob Jones bob@localhost=Bob Jones bob jones company com>=Bob Jones bob =Bob Jones Затем нужно создать Git репозиторий и запустить экспорт: git init /tmp/converted cd /tmp/converted /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors Флаг -r указывает на подлежащий конвертации Mercurial репозиторий, а флаг -A задаёт файл с соответствиями между авторами. Скрипт пробегается по наборам изменений Mercurial и преобразует их в скрипт для fast-import в Git. И отправляем изменение в репу гита: git remote add origin git@my-git-server:myrepository.git git push origin --all Для винды почти так же только немного другие команды: cd c:\projects hg clone hg-repo git init converted git clone http://repo.or.cz/r/fast-export.git Отредактировать c:\projects\fast-export\hg-fast-export.py. Начало этого скрипта нужно заменить на такое: #!/usr/bin/env python # Copyright (c) 2007, 2008 Rocco Rutte and others. # License: MIT import sys # import mercurial libraries from zip: sys.path.append(r'C:\Program Files (x86)\Mercurial\library.zip') from mercurial import node from hg2git import setup_repo, fixup_user, get_branch, get_changeset from hg2git import load_cache, save_cache, get_git_sha1, set_default_branch, set_origin_name from optparse import OptionParser import re import os Скопировать fast-export в converted игнорируя .git папку. Далее: cd converted и создайте тут файл authors.txt по аналогии из linux версии. И hg-fast-export.sh -r c:\projects\hg-repo -A authors.txt Готово. Дальше можно заливать гит репу на сервер.

воскресенье, 9 февраля 2020 г.

Не удаётся выполнить ни Add-Migration, ни Update-Database

#entity_framework #migration


Добрый вечер. Суть проблемы в следующем: перестали применяться миграции в EF Code First. 

После внесения изменений пытаюсь выполнить Add-Migration , получаю сообщение:


  Unable to update database to match the current model because there are
  pending changes and automatic migration is disabled. Either write the
  pending model changes to a code-based migration or enable automatic
  migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to
  true to enable automatic migration.


Попытка выполнить Update-Database приводит к той же ошибке. 

По советам в интернете пыталась удалять папку с миграциями и таблицу _MigrationHistory,
делать Build Batch - ничего из этого не помогло.

Пробовала полностью удалить БД и выполнить Update-Database, с нуля БД создается,
но последующие изменения применить уже невозможно - та же ошибка в консоли.

Подскажите, пожалуйста, есть ли решение. Может, нужна какая-то дополнительная информация
- я предоставлю. Заранее спасибо.
    


Ответы

Ответ 1



Я только один случай знаю из практики, когда можно получить описанную вами ситуацию. Проверил на первом попавшемся проекте, где рабочая база и рабочие миграции. Вот как я ломал: создал в первой попавшейся таблице поле Title1 тут же сделал Add-Migration Asdf1 тут я должен был сделать Update-Database -- но я сделал вид, что я забыл применить миграцию через Update-Database, поэтому в этом шаге ничего не делаем сделал в этой же таблице ещё одно поле Title2 выполняю Add-Migration Asdf2 Вуаля: получаю ровно описанную вами ситуацию: PM> Add-Migration Asdf2 Unable to generate an explicit migration because the following explicit migrations are pending: [201705272231565_Asdf1]. Apply the pending explicit migrations before attempting to generate a new explicit migration. PM> Update-Database Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Applying explicit migrations: [201705272231565_Asdf1]. Applying explicit migration: 201705272231565_Asdf1. Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. You can use the Add-Migration command to write the pending model changes to a code-based migration. PM> (Выделил полужирным ключевой момент, вольный перевод: не забудьте применить миграцию перед тем как пытаться создавать новую) Как чиню: комментирую поле Title2 жму Update-Database (применяется миграция Asdf1) раскомментирую поле Title2 выполняю Add-Migration Asdf2 выполняю Update-Database Всё работает! Проверьте, у вас возможно такая же ситуация. Меня смущает вот эта часть вопроса: "с нуля БД создается, но последующие изменения применить уже невозможно" -- выходит, вы несколько раз подряд забываете применить миграцию к базе перед созданием новой?

Ответ 2



Благодаря смекалке пользователя A K выяснилось, что выполнению команд мешал класс инициализатора БД и следующие строки: Database.SetInitializer(new DbInitializer()); Database.Initialize(true); Причина в том, что Entity Framework 6 не позволяет использовать инициализаторы (например, DropCreateDatabaseAlways) вместе с миграциями. Более подробно о проблеме: If this initializer is used to create the database then a single entry is added to the __MigrationsHistory table which then renders the database un-usable with migrations (since these initializers don't use your migrations to create the database). This has confused a large number of people in previous releases, so we opted to not automatically create database/schema when migrations is enabled. Источник: тык сюда It looks like EF 6.0 introduces a new rule: "If the DbContext is using an Initializer AND Migrations are configured, throw an exception when building the model". Источник: тык сюда Может, это поможет кому-нибудь, кто, как и я, попал в подобную ситуацию.

пятница, 24 мая 2019 г.

Переезд с mercurial на git

Здравствуйте! Есть большая проблема с переездом на git. Почему-то переезжает только одна ветка, а их полно... Использую TortoiseHg с плагином hggit. В hgrc меняю только path. Прошу помочь в этом вопросе.


Ответ

Для пингвина лучше сделать вот так:
Есть инструмент hg-fast-export
Его можно найти здесь:
git clone http://repo.or.cz/r/fast-export.git /tmp/fast-export
Нужно получить mercurial репу:
hg clone /tmp/hg-repo
Далее нужно создать файл соответствия авторов.
cd /tmp/hg-repo hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors
В /tmp/authors будет примерно следующее содержимое:
bob bob@localhost bob bob jones company com> Bob Jones Joe Smith
В примере выше, один и тот же человек (Боб) вносил изменения под пятью различными именами, лишь одно из которых правильное, а одно и вовсе не соответствует формату Git. hg-fast-export позволяет быстро исправить ситуацию, добавив ={new name and email address} к каждой строке, которую мы хотим изменить; чтобы оставить имя как есть, просто удалите нужные строки. Если же все имена выглядят хорошо, этот файл и вовсе не потребуется. В нашем примере мы хотим чтобы данные выглядели так:
bob=Bob Jones bob@localhost=Bob Jones bob jones company com>=Bob Jones bob =Bob Jones
Затем нужно создать Git репозиторий и запустить экспорт:
git init /tmp/converted cd /tmp/converted /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors
Флаг -r указывает на подлежащий конвертации Mercurial репозиторий, а флаг -A задаёт файл с соответствиями между авторами. Скрипт пробегается по наборам изменений Mercurial и преобразует их в скрипт для fast-import в Git. И отправляем изменение в репу гита:
git remote add origin git@my-git-server:myrepository.git git push origin --all
Для винды почти так же только немного другие команды:
cd c:\projects hg clone hg-repo git init converted git clone http://repo.or.cz/r/fast-export.git
Отредактировать c:\projects\fast-export\hg-fast-export.py. Начало этого скрипта нужно заменить на такое:
#!/usr/bin/env python
# Copyright (c) 2007, 2008 Rocco Rutte and others. # License: MIT
import sys
# import mercurial libraries from zip: sys.path.append(r'C:\Program Files (x86)\Mercurial\library.zip')
from mercurial import node from hg2git import setup_repo, fixup_user, get_branch, get_changeset from hg2git import load_cache, save_cache, get_git_sha1, set_default_branch, set_origin_name from optparse import OptionParser import re import os
Скопировать fast-export в converted игнорируя .git папку. Далее: cd converted и создайте тут файл authors.txt по аналогии из linux версии.
И hg-fast-export.sh -r c:\projects\hg-repo -A authors.txt Готово. Дальше можно заливать гит репу на сервер.