2016年1月に Git 2.7 がリリースされました。
色々なコマンドが増えたりしていますが、なかでも .gitignore に関する仕様追加が興味深かったのでまとめます。
.gitignore とは
Git で管理したくないファイルを設定するためのファイルです。
たとえば .gitignore ファイルにこのように書いて置いておくと、
*.json /sample-folder
拡張子が .json
のファイルと、 /sample-folder
というフォルダ配下は Git で管理されなくなります(変更などがあっても無視される)。簡単ですね。
.gitignore の設定を、打ち消したい場合
!
記法で、設定の打ち消しが可能です。
たとえばこう書くと、
*.json !required.json
拡張子が .json
のファイルは無視されるのですが、 !
をつけた required.json
だけは Git 管理の対象になります。便利ですね。
ここまでは、2.6 までも同じ仕様でした(おさらい)。
Git 2.7 から、無視させたフォルダ配下に対しても !
が有効になる
今までは、フォルダを無視した場合、その配下の対象について !
を指定しても効果がありませんでした。ちょっと不便だなーと思う場面もあったのですが、これが 2.7 から有効になります。
/sample-folder !/sample-folder/required.txt
上記の設定の場合、
2.6 では、 /sample-folder/required.txt
は無視されたまま(有効にならない)。
2.7 では、 /sample-folder/required.txt
は Git管理の対象になります!
どんな時に使えるか
個人的には、たとえば WordPress の入っているプロジェクトなどで
- WordPress のフォルダは Git から無視させたい (コアやプラグイン、アップロードファイルなど)
- でも、WordPress のテーマフォルダだけは Git で管理したい
という場合などでしょうか。
.gitignore をこんな感じに書けます。
/wordpress !/wordpress/wp-content/themes/my-theme
あっさり可能になりました。
ちなみに、 Git 2.6 で同じことをしたければ
同様のことは、以下のように書けば 2.6 まででも可能です。えらく冗長ですが……
/wordpress/* !/wordpress/wp-content /wordpress/wp-content/* !/wordpress/wp-content/themes /wordpress/wp-content/themes/* !/wordpress/wp-content/themes/my-theme
というわけで、この 2.7 での変更点はありがたい……!
注意点
2.6 と 2.7 とで .gitignore の挙動が異なるわけなので、複数環境で Git のバージョンが異なっているとハマる可能性大です。あちらでは無視されて、こちらの環境では有効になって……。その点は要注意と思います!
参考
- Git 2.7 の優れた新機能 - Atlassian Japan http://japan.blogs.atlassian.com/2016/01/git-2-7-release/
- .gitignore で無視したフォルダ配下の、特定のフォルダだけ無視しないようにする方法 - Qiita http://qiita.com/matsuoshi/items/0767198c17d4d0f3c22d