我正在使用 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 的缺点是丢失了迁移历史记录,这是一个可能想要保留的东西。