Git 管理中のファイルを .gitignore に追加したあと追跡しないようにする
前回、GitHub にパスワード等の情報を公開しないようにする方法として、production-config.js
といったファイルを作って .gitignore
に追加しておく、というやり方を紹介した。
これに関連しての Git ネタ。
管理する環境情報が増えてきた
もし、production-config.js
で管理する環境情報が増えてきたら、ということを考える。
// production-config.js
module.exports = {
// FTP 接続先情報
ftp: {
user : 'user',
password: 'password',
host : 'example.com'
},
// サーバのログイン情報
server: {
// ...
},
// メールサーバの設定
mailServer: {
// ...
}
// ...
};
こうなってくると、設定ファイルにどのような構成で情報を書いていたか、分かりにくくなってくる。別環境で当該プロジェクトを git clone
した時に、production-config.js
は一切 Git 管理されていないので、このファイルにどんな風に設定情報を書けばいいのか、分かりにくくなるのだ。
一度だけ Git 管理し、以降は無視したい
そこで、設定値を書いていない空の production-config.js
を用意し、コレを1回だけコミットしておこうと思う。そうすれば、別環境で git clone
した時も、「production-config.js
のこの欄にパスワードを書けばいいんだな」と分かる。
ということで以下のようなファイルを用意。
// production-config.js
module.exports = {
// FTP 接続先情報
ftp: {
user : '', // ← ココを空文字にした状態で置いておく
password: '',
host : ''
},
// ...
};
まずはこの状態のファイルをいつもどおり $ git add production-config.js
してコミットしよう。このファイルは秘密情報を含んでいないので Push してしまって問題ない。あわせて、.gitignore
に production-config.js
を間違いなく登録しておく。
その上で、ローカルでこのファイルの変更を監視しないように設定する。
# ローカルの production-config.js の変更を監視しないようにする
$ git update-index --skip-worktree production-config.js
コレで、production-config.js
を変更しても git status
に表れなくなるので、ウッカリ git add .
で追加してしまった、といった事故が防げる。あとはパスワード等の設定項目をローカル環境でだけ書いておけば良い。
この skip-worktree
と似たモノに assume-unchanged
というコマンドもあり、両者は似たようなことができる。skip-worktree
の方がローカルの変更を優先して保持する感じで、assume-unchanged
はリモートに変更があったらそれを取り込んでローカルの変更を破棄する動き。