まず gibo
gibo を使う
https://github.com/simonwhitaker/gibo
$ gibo osx
### https://raw.github.com/github/gitignore/408c616ae0ad8f4b8101d8e876b9b67ac6b14059/Global/osx.gitignore
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
上のように、 gibo を使うと .gitignore 用の行を出力する。
なので普通、シェルの >>
(追記リダイレクト) で .gitignore に足していく
$ gibo osx python >> .gitignore
しかし、この操作では gibo でどのファイルを無視したのか記録しきれなくなる。
忘れて3回分記録してしまう例
$ gibo python >> .gitignore
$ # しばらく経つ
$ gibo python >> .gitignore
$ # しばらく経つ
$ gibo python >> .gitignore
3 回実行すれば、当然 3 回分追記される。忘れる方が悪いんだけど。
そして .gitignore_gen
そこで、私はプロジェクト内に .gitignore_gen というファイルを作ることにしている。
.gitignore_gen は単に bash スクリプトになっている。
内容の例を以下に示す。
.gitignore_gen
#!/usr/bin/env bash -eu
cd "${0%/*}" && exec > .gitignore
gibo osx
gibo linux
gibo vagrant
gibo python
内容は実にそのまま、 .gitignore_gen のあるディレクトリの .gitignore を上書きするようリダイレクトし、 gibo の出力を記録する。
権限をつけて実行
$ chmod +x .gitignore_gen
$ ./.gitignore_gen
このようにしておけば、 gibo で一度出力した内容をさらに .gitignore に記録してしまう可能性はない。
また、 gibo に含まれていないプログラミング言語やフレームワークの場合も、
以下の cat を利用してヒアドキュメントにできる。
.gitignore_gen
#!/usr/bin/env bash -eu
cd "${0%/*}" && exec > .gitignore
gibo osx
gibo linux
gibo vagrant
gibo python
cat <<'EOF'
.foobar.conf
something_*.log
EOF