
.gitignoreにハマったのでメモします。
.gitignoreとは?
gitで管理するファイルのうち、管理したくないファイルを除外するためのファイルです。node_modulesや、.DS_Storeなど。
/の位置について

[Git] .gitignoreの仕様詳解 - Qiita
対応バージョン この記事の内容は、少なくともGitのバージョン2.19.1までは対応している。 もし最新のGitで新しい動きがあれば随時更新する。 基本 .gitignoreを使うと無視する(Gitのトラッキングの対象外とする)ファイル o...
| /の位置 | 例 | 無視対象 |
| 末尾以外 | /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だけ管理することができます。

にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村


コメント