.gitignoreにハマったのでメモします。
.gitignoreとは?
gitで管理するファイルのうち、管理したくないファイルを除外するためのファイルです。node_modules
や、.DS_Store
など。
/の位置について
https://qiita.com/anqooqie/items/110957797b3d5280c44f#%E5%9F%BA%E6%9C%ACの解説がわかりやすいですが、特に以下を意識しないといけないです。
/の位置 | 例 | 無視対象 |
末尾以外 | /files, files/files2 | カレントディレクトリからの相対パスに適するディレクトリまたはファイル |
末尾だけ | files/ | サブディレクトリを含むディレクトリ |
末尾以外&末尾 | /files/, /files/files2/ | カレントディレクトリからの相対パスに適するディレクトリ |
ハマりポイント
こんなディレクトリがあったとします。
dir/
├ index.html
├ test/
├ index.html
├ apple.html
例えば、test/
のうち、index.html
だけを管理したいなと思った場合、以下のように書けばいいかなと思ったわけです。
/test/
!/test/index.html
こちらはtest/
ディレクトリを無視したままになるので、ダメです。
.gitignoreのルールとして、ディレクトリを無視対象にすると、その配下のファイルも全て無視対象となり、触れなくなります。
書くなら以下
/test/*
!/test/index.html
無視するのはtest/
配下のファイル・ディレクトリだけとし、そのうちindex.html
ファイルだけは無視対象外としています。
では、test/
だけを管理したい場合はどうすればよいでしょうか?以下はうまくいきません。
*
!/test
*
で、全てが無視対象になっているので、2行目は効きません。
*
!*/
!/test/*
こうすれば効きます。2行目では、ディレクトリを無視対象から外しています。ちなみに
*
!*/
これでgit status
したら、test/
が管理対象に出てくるんじゃないかと思ったんですが、出てきませんでした。これは、*
が全てのファイルにかかってしまっており、test/
は現在空っぽだとgitに認識されているためかなと思っています。gitは空っぽのディレクトリは管理対象としてくれません。
ちなみにいろいろいじっていて、以下で書いた方がいいのかなと思いました。
/*
!/test/
これならば、カレントディレクトリにあるディレクトリ・ファイルに効くので、同じ階層のtestだけ管理することができます。
にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村
コメント