LoginSignup
35
50

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-30

あまり考えずに作業して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

35
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
50