【问题标题】:Ignore file once in git在 git 中忽略文件一次
【发布时间】:2019-06-02 21:26:00
【问题描述】:

我在这个话题上非常愚蠢和新。我已经搜索了一个明确的答案,但到目前为止我还没有找到。而且我害怕破坏我的产品服务器文件。所以..

我有一个服务器(用 pyhton 和 Django 编写)。我有一个根据环境而变化的文件(settings.py)。

我有 3 个用于 3 个环境的布尔变量 在本地计算机上运行时,我会相应地更改此文件,以及开发服务器和产品服务器(都托管在 Heorku 中)。

我正在使用sourcetree 来管理我的 git。 当我想在开发服务器中测试我的代码时,我将我的代码从我的 bitbucket repo 'dev' 分支推送到我的 heroku git DevServer。但随后我的settings.py 也被推送,因此我需要将其配置回开发服务器配置。然后回到本地开发,然后再次到开发服务器,然后到生产服务器 - 分配单个文件推送,在我看来,我可以避免。当我从开发合并到master时,这个settings.py文件将再次被更改,我需要再次更新它以匹配生产环境。

长话短说,我想避免这种情况。一旦我把这个文件放在服务器中,我想从更改中忽略它。但是将其置于忽略状态将始终忽略它。有时我确实想将文件中的重要更改推送到所有存储库/环境..

我尝试不提交该文件,但我收到了需要提交或丢弃该文件的错误。

【问题讨论】:

  • 我建议你阅读一下.gitignore (man page)
  • rails 中,您在同一个配置文件中有不同的开发、测试和生产配置。因此你没有这个困境。您可以使用 env 变量在两者之间进行选择。你确定 django 不一样吗?
  • 好点.. 没有考虑这个方向:) 检查@Amadan 的答案.. 在heroku 中使用环境变量。效果很好

标签: django git heroku


【解决方案1】:

提交文件的两个版本:my_site/dev_settings.pymy_site/prod_settings.py

使用Heroku config varsDJANGO_SETTINGS_MODULE 更改为my_site.dev_settingsmy_site.prod_settings


或者(可能是一个更好的主意,如果文件包含秘密 - 它通常会 - 不应该提交):

settings.py中的可变值或秘密值设置为环境变量:

SECRET_KEY = os.environ.get('MY_SITE_SECRET_KEY', 'dummy')
DEBUG = os.environ.get('MY_SITE_DEBUG') == 'True'

然后将 MY_SITE_SECRET_KEYMY_SITE_DEBUG 设置为 Heroku 配置变量。


最后,你的问题的字面答案,虽然不是我为你的场景建议的路径:

git update-index --skip-worktree my_site/settings.py

将阻止 Git 注意到你的文件中的变化,直到你发出这个时间

git update-index --no-skip-worktree my_site/settings.py

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 2019-02-15
    • 2020-08-07
    • 2016-04-09
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多