あまり考えずに作業してgitHubにあげると見られたくない情報まで載せてしまうことになります(公開レポジトリ)。このとき、単にファイルを変更してpushしてもgitHub上の履歴で情報は漏れてしまいます。
ここでは、履歴も含め完全にgitHubから消し去ります。
また、今後は環境ごとに情報を管理し外部から見えないようにします。
*まだgitHubにあげていない場合は、gitHubから履歴を消去する手間な手順は必要ありません。下記手順1のconfigを導入しgitHubにpushしちゃいましょう。
手順
- configを導入し、定数を環境ごとに管理出来るようにする。
- 該当ファイルのバックアップをとり、git管理下から履歴も含め全消去。
3.バックアップファイルも戻し、gitHubにpushする。
#1. configを導入し、定数を環境ごとに管理出来るようにする。
##configをインストール
gem 'config'
を追加
$ bundle install
$ bundle exec rails g config:install
でインストール完了!
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]
(http://qiita.com/yumiyon/items/32c6afb5e2e5b7ff369e)
[Git の履歴からファイルを完全に削除する – git filter-branch]
(http://easyramble.com/git-filter-branch.html)