matsuo

Git 2.7 で .gitignore が便利になっている

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.txtGit管理の対象になります!

どんな時に使えるか

個人的には、たとえば 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 のバージョンが異なっているとハマる可能性大です。あちらでは無視されて、こちらの環境では有効になって……。その点は要注意と思います!

参考

お問い合わせはこちら