我一直在思考这个问题。
请参阅此处:我应该在 .gitignore 文件中添加 Django 迁移文件吗?
我同意 Robert L 的观点,它说我们不应该进行迁移。
我的问题是:
1) 如何忽略除了迁移文件夹中的 init.py 文件之外的所有迁移?
2) 如何删除已经提交的迁移?
我希望避免开发人员之间发生任何冲突。
应用程序结构示例:
|_roles
|__pycache__
|___init__.cpython-37.pyc
|_admin.cpython-37.pyc
|_forms.cpython-37.pyc
|_models.cpython-37.pyc
|_urls.cpython-37.pyc
|_views.cpython-37.pyc
|_migrations
|__pycache__
|___init__.cypthon-37.pyc
|___0001_initial.cpython-37.pyc
|___0002_auto_20200111_1307.cpython-37.pyc
|___0003_auto_20200111_1418.cpython-37.pyc
|__init_.py
|_0001_initial.py
|_0002_auto_20200111_1307.py
|_0003_auto_20200111_1418.py
|__init_.py
|_admin.py
|_apps.py
etc..
.gitignore:我正在考虑:
*./migrations/
但这会排除整个文件夹。
您可以使用
.gitignore
。以感叹号 (!) 为前缀的行不会从 gitignore 中排除。
所以你的 .gitignore 文件看起来像这样
_migrations/*
!_migrations/__init__.py
这将忽略
_migrations
中除 __init__.py
之外的所有内容。
要删除已提交的文件,您可以使用
git rm
和 --cached
标志...
--cached
Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.
例如
git rm --cached _migrations/0001_initial.cpython-37.pyc
最后,我也不同意关于不进行迁移的说法。在我的选择中,提交它们正是您想要做的。它确保数据库实例在不同环境中保持一致。虽然 Django 中的许多迁移都是生成代码,但情况并非总是如此。您可能会发现手写迁移最常见的地方是当有人进行数据迁移时。
简而言之,提交迁移 .py 文件,但排除所有 .pyc 文件。
!**/migrations/__init__.py
这段代码足以优雅地忽略迁移