🚀 Git の ignore 系ファイルを管理する CLI を作ってみた
タイトル通り作ってみました。gig という CLI ツールです。リンクは↓より👀
https://github.com/tomatod/gig
Git のトラッキングからファイルを除外するとき、.gitignore
を使うことが多いと思いますが、そこにも書きたくない場合は.git/info/exclude
に書くことが時々ありますよね。あと、今更知ったんですが、グローバルつまり全リポジトリから除外したい場合は$HOME/.config/git/ignore
に書けるとのこと🤔
後者の2つはファイル名を毎回忘れるのと、標準で出回ってるテンプレなんかも使えたらいいなーとか思いまして。日曜は奥さん外出で暇だったのもあり、ガーっと作ることにした次第です🔥
📝 どんなことができるの?
シンプルに以下のようなことができます。コマンド実行すると編集のためにエディタが起動します。使うエディタは editor (-e) オプションで任意に指定できますが、デフォルトでは git config core.edit
の値 > $EDITOR
の値 > vi
の順で選択されます⏩️
スコープに応じた Git 除外ファイルの編集 (-s scope)
# .gitignore の編集 (-s file)
$ gig
# .git/info/exclude の編集 (-s local)
$ gig -s local
# $HOME/.config/git/ignore の編集 (-s global)
$ gig -s global
エディタの指定 (-e editor)
デフォルトでは git config core.edit
の値 > $EDITOR
の値 > vi
の順で選択されますが、明示的に指定する場合は editor (-e) オプションで指定します。
# vim で .gitignore を編集
$ gig -e vim
# nano で .git/info/excludeを編集
$ gig -e nano -s local
カレントなレポジトリで除外されるファイルの一覧を表示
mode (-m) オプションでアクションの種類を指定します。デフォルトは edit で、list とすると Git で除外されるファイルの一覧がスコープ毎に表示されます。オプションじゃなくてサブコマンドにしたほうがスマートな気はしたのですが、ぶっちゃけ早く完成させたく🚀
$ gig -m list
--- global: /home/tarou/.config/git/ignore
hoge
--- local: /home/tarou/gig/.git/info/exclude
bar
boo
--- file: /home/tarou/gig/.gitignore
aiueo
テンプレートから.gitignoreを作成 (-t template)
github.com/github/gitignore からテンプレートをカレントなレポジトリに .gitignore としてコピーして編集することができます。
# Go 用のテンプレートで .gitignore を作成
gig -t community/Golang/Go.AllowList.gitignore
# Python 用の Jupyter Notebook 用テンプレートで .gitignore を作成
gig -t community/Python/JupyterNotebooks.gitignore
仕組みとしては、同レポジトリを $HOME/.config/gig/gitignore
にクローンしてきて、カレントなレポジトリに対象テンプレートをコピーしてるだけです。template (-t) オプションの引数は github.com/github/gitignore からの相対パスです。GitHub で当該レポジトリを開き、使いたいテンプレートを探して開き、以下のように画像中央あたりのコピーアイコンをクリックするとクリップボードにコピーできます。
🔽 最後にインストール方法
最後まで読んでいただきありがとうございました。興味あれば使ってやってください。インストール方法は README に書いていますが、以下のとおりです。意外と使えるなと思ったので、もうちょっと改造するかもしれません。適宜コマンドの説明はgig -h
か README のほうで確認いただければと思います🙏
Goユーザの方
go install github.com/tomatod/gig@latest
実行バイナリだけ欲しい方
リリースからバイナリをダウンロードできます。そこに書いていますが、OS や CPU アーキテクチャ毎に違うのでご注意を。なお、Windows では動作確認してないです🧟