Я использую git для управления версиями проекта Django 1.7 + Django CMS 3.0.6.
В ходе создания различных приложений и т. д. я получаю множество файлов миграции. Файлы миграции в настоящее время включены в мой репозиторий git.
До сих пор я старался не включать виртуальные файлы env напрямую в репозиторий, так как это кажется довольно запутанным и избыточным. Вместо этого я до сих пор включал в репозиторий файл требований pip и использовал его для воссоздания виртуальной среды при необходимости.
Однако недавно я обнаружил, что выбор включения файлов миграции в репозиторий, по-видимому, требует включения в репозиторий и всех виртуальных файлов env. Я говорю это, потому что при развертывании моего проекта на производственном сервере и попытке запустить любую из команд базы данных (syncdb, makemigrations или migrate) через python manage.py я получаю сообщение об ошибке:
KeyError: u"Migration image_gallery.0001_initial dependencies reference nonexistent parent node (u'cms', u'0004_auto_20141108_1256')"
тогда как на моей локальной машине такой ошибки не возникает даже после удаления базы данных.
Я отследил источник этой ошибки до того факта, что виртуальный env на моей локальной машине имеет ссылку на «0004_auto_20141108_1256» (внутри пакета django-cms — кажется, что некоторая информация о миграции cms записывается непосредственно внутри самого виртуального каталога env) в то время как в производственной среде нет - поскольку производственный venv создает полный файл требований к пипсу. Поэтому две виртуальные среды не совсем совпадают, хотя все сторонние библиотеки одинаковы. В настоящее время я не включаю venv в свой репозиторий git.
Итак, как я вижу, у меня есть два варианта:
1. include the virtual env in my git repo
2. drop the migration files from git
Какой вариант лучше и почему - или есть третий еще лучший способ?
Недостатком № 1 является ненужное раздувание. Недостатком варианта № 2 является потеря истории миграции, которую можно было бы сохранить.