首页 > 解决方案 > 如何忽略迁移但 __init_.py?

问题描述

我一直在思考这个问题。

请参见此处:我应该在 .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/

但这将排除整个文件夹。

标签: pythondjangomigration

解决方案


你可以使用.gitignore. 以 bang (!) 为前缀的行不会从 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 文件。


推荐阅读