【问题标题】:Django settings __init__.py not respected by gitignoregitignore 不尊重 Django 设置 __init__.py
【发布时间】:2021-07-21 14:51:58
【问题描述】:

在我的 Django 项目中,我将设置组织为具有如下文件结构的模块:

/settings/
  __init__.py
  base.py
  prod.py
  dev.py
  dev_user_a.py
  dev_user_b.py
  prod_user_a.py
  prod_user_b.py    etc.

它们作为一个层次结构工作,即 def_user_a.py 导入 dev.pydev.py 导入 base.py__init__.py 导入“叶子”之一,即dev_user_a.py,这是每个用户可以选择他的设置的方式。这工作正常,除了我似乎无法从 git 中排除 /settings/__init__.py,这意味着对该文件的本地更改可能会意外地广播给其他用户。

两个问题:

  1. 有没有更好的方法来实现这一点?如何实现?
  2. 为什么将__init__.py 添加到.gitignore(或.git/info/exclude)不起作用?

【问题讨论】:

  • 已经提交了吗?
  • 是的,由另一个用户,然后我拉了它,不知道发生了这种情况,并在他的设置上工作了一段时间。现在我已经把它改回了我的价值观,我还没有上演它,但它一直在我未提交的更改中徘徊。当我尝试 git check-ignore trees/trees/settings/* 时,它正确列出了 settings/dev_xxx.py,但没有列出 init.py
  • .gitignore 包含(除其他外)这两行 tree/trees/settings/__init__.py trees/trees/settings/dev_*.py
  • 如果它被跟踪,那么它不会被忽略。
  • 啊,我必须使用 git rm --cached trees/trees/__init__.py,谢谢。

标签: git django-settings


【解决方案1】:

正如comments 中已经指出的那样,跟踪 文件不会被忽略,即使其名称列在排除文件中。另见this related question。请注意,被跟踪的文件是当前在 Git 的 index 中的任何文件,并且提交的文件将在 git checkout 期间被提取到 Git 的索引中,因此默认情况下会跟踪任何提交的文件。

省略或删除__init__.py 很重要,因为它的存在会将模块变成“包”:例如,参见§6.4 of the official Python 3 documentation。删除它会删除这个目录的包。

在这种特殊情况下,__init__.py 文件可能只是。用户可以直接导入正确的设置。或者,因为这是一个 Django 设置,他们可能应该使用DJANGO_SETTINGS_MODULE 环境变量,如the Django documentation 中所述。 (注:Django 用户在这里可能有更好的答案。我自己从未使用过 Django。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 2017-06-06
    • 2017-12-12
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多