【问题标题】:How to ignore a file on Github when doing a git pull执行 git pull 时如何忽略 Github 上的文件
【发布时间】:2025-12-24 19:10:07
【问题描述】:

我正在使用 Ruby on Rails 4、Ruby 2.2.2 并部署到 Heroku。我用 Heroku config:set 配置了我的秘密变量,我想使用 Rails.application.secrets.secret_key 来访问我的秘密。

在开发和部署到 Heroku 时,使用 Git 和 GitHub 管理我的 config/secrets 文件的最佳方法是什么?我的配置文件如下:

development:
  secret_key_base:    <value>

test:
  secret_key_base:    <value>

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base:           <%= ENV["SECRET_KEY_BASE"] %>
  # Amazon credentials
  s3_bucket_name:            <%= ENV["S3_BUCKET_NAME"] %>
  aws_secret_access_key:     <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  aws_access_key_id:         <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_region:                <%= ENV["AWS_REGION"] %>
  aws_cloud_front:           <%= ENV["AWS_CLOUD_FRONT"] %>

  # Twitter credentials
  twilio_token: <%= ENV["TWILIO_TOKEN"] %>
  twilio_sid:   <%= ENV["TWILIO_SID"] %>
  twilio_number: <%= ENV["TWILIO_NUMBER"] %>

即使在 .gitignore 文件中,我也已将更改推送到我的文件,因为它过去曾被 Git 跟踪过。我停止在 Git 上跟踪我的 config/secrets.yml 文件,所以我不推送更改,但是当我从 master 下拉时,我的 config/secrets 文件仅被生产凭据覆盖。

【问题讨论】:

    标签: ruby-on-rails ruby git heroku github


    【解决方案1】:

    可以从 git 存储库中完全删除文件,但这很乏味。

    不过,您可以轻松地将其从当前文件中删除。用git rm yourfile 删除它并提交并推送它。这将删除您的本地文件,因此您可能需要先复制它。您可以在提交删除后将其添加回来。

    请注意,.gitignore 不涉及已经在版本控制下的文件。但是,显式删除此类文件是可行的。不应再跟踪该副本。

    【讨论】:

      【解决方案2】:

      Git 不提供部分提取的方法,但是在您的情况下,您需要做的就是为您的生产和开发定义具有相同名称的环境变量键。这样做将允许您单独保留文件并在本地和生产环境中使用 values 键,而无需进行任何更改。如果您想推送新的提交而不推送对此文件的任何更改,您可以使用

      git update-index --asume-unchanged <filenameHere>
      

      这将允许您将此文件保存在本地,而无需将其与其余更改一起推送到 git。不幸的是,我不知道可以做相反的事情并在拉取时排除某些文件。

      【讨论】:

        【解决方案3】:

        如果您已提交的文件中有无法轻易更改/轮换的秘密,有几种方法可以从 git 中完全删除以前提交的敏感信息。

        Github 指南为此提供了 good article

        【讨论】: