なずなログ

ただのSIer系SEが思ったことや色々書く感じのアレです

ホワイトリストの.gitignoreで管理対象にしたいファイルが追加されないときの解決方法

やろうとしたこと

LaravelでAPIを作っていて、そのAPI仕様をLaravel API Spec Generator(kotamat/laravel-apispec-generator)でいい感じに残したかった。 このライブラリはPHPUnitを動かしたときにいい感じにRFC 7230ベースでの記述でAPI Specを記録してくれる。

詳しくはこちら。 SwaggerでAPI仕様書に消耗しているなら.restを使うといい。特にLaravelなら

例えば

http://localhost/api/test

というエンドポイントのテストを動かすと、

laravel/storage/app/http/localhost/api/test/GET.http

というファイル名でAPI仕様を吐き出してくれる。

インストールOK!テストもOK!あとはAPI Specをコミットしておけばいいよね! (作者様の意図だとgit汚染しないためにデフォルトでgit管理対象外のstorage/app/配下に出力するようにしてたらしいけど、フロントエンドが別担当だったので敢えてgit管理することにした。)

しかしgitにしばし悩まされることに…。

事象

  • 既に管理対象外だったのでホワイトリスト形式の.gitignoreに追加した。
  • しかしgit管理上では管理対象外のままで、追加できない。
  • git rm --cached .も効果がない。(めちゃくちゃ差分出てきて一瞬びっくりするだけだった)
laravel/storage/app/.gitignore
*
!http/
!http/*

解決策

1つだけの.gitignoreで済まそうとしたのが悪かったのかもしれないと思い、git管理対象外のディレクトリ内にも.gitignoreを配置した。

laravel/storage/app/http/.gitignore
!*

一度上位の.gitignoreで管理対象に含め、下位の.gitignoreを新規に作成してすべてを管理対象にすればOKってことなんですね…。