.gitignoreにハマった

プログラミング

※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

.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だけ管理することができます。

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

にほんブログ村 IT技術ブログへ
にほんブログ村

コメント

タイトルとURLをコピーしました