gitignoreでディレクトリごと無視すると、「その中の特定のファイルだけはgitに反映」ができない
タイトルが分かりづらいですが、例えば
dir1というディレクトリは基本全部除外したい(gitignore)。
けど、dir1/file1だけはgitに含めたい…。
ありますよね。
そんなときは
dir/*
!dir/file1
と書きます。
ダメな例
gitignoreに
dir
!dir/file1
と書いてもfile1はgitに反映されません。
dirとだけ書くのはdirディレクトリを全無視という意味で、dir/*は、dirディレクトリの配下全部除外の意味です。
ディレクトリごとgitignoreに指定してしまうと、あとでその中の特定のファイルはgitignoreから除く、ということができません。
一応この記事では、除く、無視と除外を使い分けています。
gitignoreから除く : gitに含める
ディレクトリを無視 : そのディレクトリごとgitから完全に無視、
dir配下を除外 : dir配下の各ファイル/ディレクトリををgitに含めない
全然分かりやすくなってないな笑
gitignoreから除きたいファイルがもっと深いとき
もっとファイルが深いときは、
dir/*
!dir/dir2/
dir/dir2/*
!dir/dir2/file
とすれば、file以外のdir配下をgitignoreに含め、fileをgitignoreから除くことができます。
意味的には
dir/*
(dir以下のファイルやディレクトリを全部除外)
!dir/dir2/
(dir2だけ残す)
dir/dir2/*
(でもやっぱりdir2以下のファイルやディレクトリは除外)
!dir/dir2/file
(それでもやっぱりfileは残す)
って感じです。
dir/*
!dir/dir2/file
はうまくいきません。
たぶんdir/*で、dir2のディレクトリごとgitignoreに含んでしまってるので、そこから!でdir2の配下のファイルだけgitignoreから除くことができないからでしょう。
参考:[Git] .gitignoreの仕様詳解(下の方)
今日は以上です!