公開してはいけないファイルを誤ってgitに追加してしまった場合

Git

この記事は 2012-11-11に STBBS.NET BLOGから移動されました

2014年8月追記: この情報は古くなっており、下記に例示されているコマンドはもう動きません。GitHubの最新情報を確認してください。それか、BFGというツールで削除するのも簡単で良いそうです。 Netsphere Engineering — git filter-branch のかわりに BFG でファイルの履歴を消去する (BFGに関する日本語の記事)

ソースコード管理システムの機能として、あらゆるファイルの履歴を完全に記録するというものがある。
普通に考えてこれは便利な機能である。だが・・・
間違えて「公開すべきでないファイル」を公開リポジトリに追加してしまった場合、頭を抱えることになる。
そのファイルを普通に削除したところで、現時点のリビジョンから消えて無くなるだけで履歴をたぐれば取得できてしまうからだ。

Subversionの場合、「特定のファイルを無かったことにする」機能が無いため一度リポジトリをダンプしたのち完全に削除して直近のリビジョンを省いたものをリストアといった手間が必要なようだ。自分の管理しているリポジトリなら面倒なだけで済むが、もしそうでなかったらと考えるとこれはまさに悪夢である。

だが Gitの場合はこういうことが出来るらしい。
Remove sensitive data · github:help
つまり、

git filter-branch --index-filter 'git update --index --remove "ファイル名"' HEAD
git commit -a
git push ...
のようにする。git pushでエラーになる場合は--forceオプションを付けてみると良い。

同じカテゴリの記事

githubから httpsでcloneしてしまったリポジトリの originを sshに変更する 2013年11月4日
100MB超のファイルをコミットしてしまい githubに pushを拒否された時 2013年10月17日
Subversion上にあるリポジトリをgithubへ公開する 2008年10月21日

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図