はじめに
手作業で無視するべきファイルを調査して書いたり、前のプロジェクトからコピーしたりするのが面倒くさい .gitignore
ファイル。
この記事ではそんな .gitignore
ファイルをWebサイト gitignore.io から生成する方法と、さらにはコマンドを1度実行するだけで生成する方法を紹介します。
Environment | Version |
---|---|
Windows10 Pro x64 | 1803 |
git | 2.19.1.windows.1 |
gitignore.io
キーワードを入力して Create
ボタンを押せば、.gitignore
の雛形を表示してくれるWebサイト。
この表示されたテキストを各プロジェクト(リポジトリ)の .gitignore
にコピー&ペーストすればできあがり。
使い方は上記の通りなんですが、APIも公開してくれているため下記のようにコマンドラインからも利用できます。
"ブラウザでWebページを開いて~"という動作が不要になるのでさらに快適。
.gitignore
生成コマンドを作成する
gitignore.io のAPIにアクセスするためのコマンドを作成します。
といっても READMEに書かれてある通り に実行すればOKです。
各環境下でのコマンド作成方法が記述されていますが、git
のエイリアス機能を使う方法がおすすめです。
git-bash$ git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi'
上記のコマンド実行後、 git ignore
コマンドとして gitignore.io から取得した .gitignore
の内容を標準出力することができます。
git ignore
コマンドにおける引数(各種プログラム言語やIDEのキーワード)の区切りはスペースではなく カンマ( ,
) になります。
むしろスペースが混ざると上手く動作しませんのでご注意ください。
# 標準出力に表示
$ git ignore unity,visualstudiocode
# .gitignoreに出力(追記)
$ git ignore unity,visualstudiocode >> .gitignore
毎回同じキーワードを入力するのがしんどい
例えば visualstudiocode
や windows
といった自分の環境で、いつも決まりきったキーワードを入力している場合。
このような個々人の開発環境に依存する無視ファイルの設定は、グローバルな .gitignore
($XDG_CONFIG_HOME/git/ignore
)に記述してしまうのがおすすめです。
-
$XDG_CONFIG_HOME/git/ignore
ファイルのパス指定git-bashgit config --global core.excludesfile $HOME/.config/git/ignore
-
$XDG_CONFIG_HOME/git/ignore
ファイルの作成git-bash$ mkdir -p $HOME/.config/git # VS Code と Windows用の設定 $ git ignore visualstudiocode,windows > $HOME/.config/git/ignore
一度 $XDG_CONFIG_HOME/git/ignore
を設定すればローカル上のすべてのリポジトリに適用される。
.gitignore
設定の優先度はリポジトリのものが優先されるため、特定のリポジトリ下では追跡するようにもできる。
# 行頭に ! をつけると無視されなくなる
!*.lnk
以上でずっと簡単に .gitignore
ファイルを生成できるようになったと思います。
が、より使いやすくするべく git ignore
コマンドのアレンジに挑戦しました。
黒魔術完全に理解した
シェルスクリプト完全ニ理解シタ。
現在は git ignore
コマンドを次のように上書きし、エラー発生時にはエラーメッセージのみ表示するようにしてます。
git config --global alias.ignore '!gicheck() { if grep -sq "ERROR: " <<< "$*" ; then grep "ERROR: " <<< "$*" ; else echo -e "$*" ; fi;}; gi() { curl -LsS https://www.gitignore.io/api/$@ | sed -r -e "s@.*(ERROR: )(\w+)@\1\x1b[31;40;1m\2\x1b[m@gi"| gicheck "$(cat -)" ;}; gi'
# .gitignoreテンプレートを表示
$ git ignore unity
# エラー発生時
$ git ignore javascript
ERROR: javascript is undefined. Use list command to see defined gitignore types !!#
以下これにたどり着くまでの流れ。
-
エラーメッセージを強調したい
エラーメッセージ
#!! ERROR: <keyword> is undefined. ~
に対して、エラー原因であるキーワードを赤文字で強調させる。git-bashgit config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ | sed -r -e "s@.*(ERROR: )(\w+)@\1\x1b[31;40;1m\2\x1b[m@gi" ;}; gi'
-
sed
コマンドを使ってエラー原因のキーワードを抽出、色変更 -
\x1b[31;40;1m
以降は赤色になり\x1b[m
以降はデフォルト色に戻る- ANSIエスケープシーケンスを
\e
で指定するとsed
コマンドでは期待通りの動作をしてくれなかった
- ANSIエスケープシーケンスを
-
-
エラー発生をもっとわかりやすくしたい(現行)
エラーが発生した場合、そのときの出力を
.gitignore
に使うことはないと考えられる。
よってエラー時の出力はエラーメッセージのみにし、ひと目でエラーだと判断できるようにする。グローバル変数を作りたくないので関数を増やし、引数を表す変数(
$@
や$*
)を使うことで対処してます。git-bashgit config --global alias.ignore '!gicheck() { if grep -sq "ERROR: " <<< "$*" ; then grep "ERROR: " <<< "$*" ; else echo -e "$*" ; fi;}; gi() { curl -LsS https://www.gitignore.io/api/$@ | sed -r -e "s@.*(ERROR: )(\w+)@\1\x1b[31;40;1m\2\x1b[m@gi"| gicheck "$(cat -)" ;}; gi'
実行例:git-bash$ git ignore javascript ERROR: javascript is undefined. Use list command to see defined gitignore types !!#
-
gicheck()
関数を追加、エラーメッセージ有る無しで処理分岐 - 変数・標準入力が改行コードを含むため、変数展開(
""
で囲む)しないと期待する動作をしてくれない
-
おわりに
黒魔術コワイ。気づいたら夜が明けてました……。
git
も使いこなそうとすると知らない機能がいっぱい出てきてコワイですね。
うっかり消費した時間が無駄でないよう、この記事が誰かの役に立つことを祈ってます!
参考
- gitignore.io - Create useful .gitignore files for your project
- .gitignoreを自動的に作る(gibo, gitignore.io を使う)
- 複数人で開発するとき git 管理から外す指定方法 3 パターンの使い分け
黒魔術