【问题标题】:Mercurial: Exclude django settings.py after intitial commitMercurial:初始提交后排除 django settings.py
【发布时间】:2011-01-22 11:37:48
【问题描述】:

在我的 Django 项目中,我希望将 settings.py 文件包含在初始提交中,以便其他开发人员可以克隆存储库并更改原始设置以使用本地设置。但是,在那之后我不想在每次提交时手动排除该文件,并且忽略文件将无法工作,因为它已经被跟踪了。

那么,我怎样才能让 mercurial 在保持原始文件被跟踪的同时自动排除 settings.py?

感谢任何帮助:)

【问题讨论】:

  • 一旦 Mercurial 跟踪一个文件,它就会始终跟踪该文件。避免 Mercurial 对其提交更改的唯一方法是在每次提交时明确要求它不要这样做。

标签: django mercurial


【解决方案1】:

对此有另一种可能更灵活的方法。不要排除 settings.py 文件。

相反,请执行以下操作:

try:
  from localsettings import *
except ImportError:
  pass

这样,如果您需要实际更改您的 settings.py 文件,其他人可以接受更改。您可以提供合理的默认值,只要您希望在本地覆盖的任何设置高于localsettings 导入。

您可以根据需要更改localsettings.py 文件(我倾向于使用它来打开DEBUG,设置我的database settings,并确保我只是使用本地内存作为我的cache backend )。

只需确保从提交中排除 localsettings.py 文件即可。

【讨论】:

  • 你把这些行放在什么文件里?
【解决方案2】:

Mercurual 最常用的方法是提交一个名为 settings.py.template 之类的文件,然后有人采取新克隆的第一步是将其复制到 settings.py 文件中,该文件已列出在.hgignore 文件中。这样,如果有人在模板中添加新设置,人们仍然会得到它并可以将其合并到他们的本地设置中。在您的启动/部署脚本中或使用克隆钩子自动将模板复制到实际中很容易,尽管大多数人都不会打扰。

【讨论】:

    【解决方案3】:

    我知道这是一个旧线程,但其他人可能会发现另一种方法仍然有用。 (我遇到了这个 SO,问同样的问题)。

    您可以将 settings.py 保存在存储库中并对其进行修改以从环境变量中获取机器特定的值。这是建议herehere

    例如,数据库连接通常因一台机器与另一台机器不同:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',  
            'NAME': os.environ['DB_NAME'],                      
            'USER': os.environ['DB_USER'],
            'PASSWORD': os.environ['DB_PASSWORD'],
            'HOST': os.environ['DB_HOST'],                      
            'PORT': os.environ['DB_PORT'],                      
        } }
    

    【讨论】:

      猜你喜欢
      • 2016-07-21
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2011-07-02
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多