【发布时间】:2015-02-24 23:33:36
【问题描述】:
我正在使用 git 对 Django 1.7 + Django CMS 3.0.6 项目进行版本控制。
在构建各种应用程序等的过程中,我最终得到了很多迁移文件。迁移文件目前包含在我的 git 存储库中。
到目前为止,我一直在尝试避免将虚拟 env 文件直接包含在我的 repo 中,因为它看起来相当混乱和多余。相反,到目前为止,我一直在 repo 中包含一个 pip 需求文件,并在需要时使用它来重新创建虚拟环境。
但是,我最近发现选择在 repo 中包含迁移文件似乎也需要在 repo 中包含所有虚拟 env 文件。我这样说是因为在将我的项目部署到生产服务器并尝试通过 python manage.py 运行任何 db 命令(syncdb、makemigrations 或 migrate)时,我得到了错误:
KeyError: u"Migration image_gallery.0001_initial dependencies reference nonexistent parent node (u'cms', u'0004_auto_20141108_1256')"
而在我的本地计算机上不会发生此类错误,即使在删除数据库之后也是如此。
我跟踪了这个错误的根源,因为我本地机器上的虚拟环境引用了“0004_auto_20141108_1256”(在 django-cms 包内 - 似乎一些 cms 迁移信息直接记录在虚拟环境中目录本身),而生产环境没有 - 因为生产 venv 是通过 pip 要求文件创建的。 因此,两个虚拟环境并不完全匹配,即使所有第三方库都相同。目前我没有在我的 git repo 中包含 venv。
所以在我看来,我有两个选择:
1. include the virtual env in my git repo
2. drop the migration files from git
哪个选项更好,为什么 - 或者还有第三种更好的方法吗?
#1 的缺点是不必要的臃肿。选项 #2 的缺点是丢失了迁移历史记录,这是一个可能想要保留的东西。
【问题讨论】:
标签: django git django-cms django-1.7 django-migrations