Rails
Git
GitHub

rails 一度gitHubにあげたID・パスワード等を履歴から消し、環境ごとに管理する

More than 3 years have passed since last update.

あまり考えずに作業してgitHubにあげると見られたくない情報まで載せてしまうことになります(公開レポジトリ)。このとき、単にファイルを変更してpushしてもgitHub上の履歴で情報は漏れてしまいます。

ここでは、履歴も含め完全にgitHubから消し去ります。

また、今後は環境ごとに情報を管理し外部から見えないようにします。

*まだgitHubにあげていない場合は、gitHubから履歴を消去する手間な手順は必要ありません。下記手順1のconfigを導入しgitHubにpushしちゃいましょう。

手順

1. configを導入し、定数を環境ごとに管理出来るようにする。

2. 該当ファイルのバックアップをとり、git管理下から履歴も含め全消去。

3.バックアップファイルも戻し、gitHubにpushする。


1. configを導入し、定数を環境ごとに管理出来るようにする。


configをインストール


Gemfile

gem 'config'


を追加

$ bundle install

$ bundle exec rails g config:install

でインストール完了!


config/settings.local.yml

gmail:

user_name: 'hogehoge@gmail.com'
password: 'hogehoge'

使い方

Settings.gmail[:user_name]

Settings.gmail["user_name"]
Settings[:gmail]["user_name"]

config/settings.local.yml は自動的に.gitignoreに設定されるので、pushしてもgitHubには転送されない。そのため外部から情報は見られない。

環境ごとの設定法等詳しくは下記ページを参照

Railsで定数を環境ごとに管理するrails_config


例えば、下記のようなファイルのIDやパスワードを管理したい

config/secrets.yml #secret_key_base

config/initializers/devise.rb #facebook・twitterログインで使用したApp_key等
config/database.yml #databaseのuser_name・password
config/environments/development.rb #deviseメール送信で使用したgmailのID・password


2. 該当ファイルのバックアップをとり、git管理下から履歴も含め全消去。

まず、該当ファイルをバックアップ。

そして、消去。

*履歴まで全消去なので、一度ブランチをきって試したほうがいいと思います。失敗しても自己責任ですので慎重に。

$ git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch 

config/secrets.yml' HEAD

のようにすれば

config/secrets.ymlは履歴も含め全消去される。

同様に全てのファイルの履歴を消去。


3.バックアップファイルも戻し、gitHubにpushする。

あとはバックアップしておいたファイルを戻してきて、addしてcommmitしてpush。

ただし、pushする際、gitHubにも履歴の変更の影響を与えるため

$ git push --force origin master(ブランチ名)

でpushする。

これで完了。


参考URL

Railsで定数を環境ごとに管理するrails_config

Git の履歴からファイルを完全に削除する – git filter-branch