見出し画像

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の仕様詳解(下の方)

今日は以上です!

いいなと思ったら応援しよう!