サブディレクトリを含めて .gitkeep だけ残したい
Git は「空のディレクトリそのもの」をコミットできない。空のディレクトリをあえて Git 管理に含めたい時には、.gitkeep
という空ファイルを配下に置いておく習慣がある。
今回、以下のような構成のサブディレクトリたちをコミットしたかったのだが、そのための .gitignore
の書き方に迷ったのでメモしておく。
保存したいディレクトリ構成はこんな感じ。
git-repository/
├ .gitignore
├ README.md
└ parent-directory/
├ .gitkeep
├ child-directory-a/
│ ├ コレは Git 管理から除外したい.txt
│ └ .gitkeep
└ child-directory-b/
├ コレは Git 管理から除外したい.txt
└ .gitkeep
このような場合に、parent-directory/.gitkeep
は念のため保存しつつ、
parent-directory/child-directory-a/.gitkeep
parent-directory/child-directory-b/.gitkeep
も Git 管理に含めるが、それ以外のファイルは除外する、という .gitignore
指定をしたかった。
結論はこう書く。
/parent-directory/**
!/parent-directory/**/
!/parent-directory/**/.gitkeep
1行目で parent-directory/
配下のファイルを除外設定に加えておき、2・3行目で配下の .gitkeep
を再帰的に見つけ出して例外設定に加えてくれる。特に2行目が直感的に分からないので、このイディオムで覚えておきたいところだ。