はじめに
2020年10月、GitHubでデフォルトブランチの名前が master から main に変わりました。これを機に私の手元には main がデフォルトのリポジトリと master がデフォルトのリポジトリが混在するようになりました。リポジトリごとに main と master のどちらかを覚えることは人智を超えているのでしょう。つい間違えて main のリポジトリで master に switch してしまうことがあります。
そこで、間違えて master に switch すると「You are wrong!」と怒られるプラグインを作ってみました。おまけとして main ブランチに自動で移動する機能もつけました。以下ではその作り方を説明します。
動作環境
動作を確認している環境は以下のとおりです。
- Mac OS 12.3
- git version 2.28.0
また、動作させるためには cowsay
コマンドをインストールする必要があります。
作り方
以下では作り方を説明していきます。完成形だけ知りたい方は直接 4. 完成 まで飛んでください。
1. 現在のブランチ名を取得する
まずは現在のブランチ名を取得するところから始めましょう。これにはgit rev-parse
コマンドが使えます。このコマンドに--abbrev-ref
オプションを渡すことでブランチ名が返ってくるようになります。
$ git rev-parse --abbrev-ref HEAD
main
2. git-hooks で switch を検出する
git-hooksを使ってswitchを検出できるようにしましょう。.git/hooks/post-checkout
に以下の内容を記述します。
#!/bin/bash
readonly BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
echo $BRANCH_NAME
実行権限を追加します。
$ chmod +x .git/hooks/post-checkout
switchしたときにブランチ名が表示されれば成功です。
$ git switch master
Switched to branch 'master'
master # ←これがgit-hooksで出力されている
3. cowsayコマンドでメッセージを表示する
いよいよ master ブランチに switch すると怒られるようにしましょう。cowsay
コマンドを使います。注意点として、post-checkout
フックを用いているため master ブランチも作っておく必要があります。これについてはもっといい方法があるかもしれません。
#!/bin/bash
readonly BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
if test $BRANCH_NAME = "master"; then
cowsay "You are wrong!"
echo ""
git switch main
fi
masterにチェックアウトしたときに以下のような表示になれば成功です。おまけとして main に移動していることも確認できます。あくまでおまけですが。
Switched to branch 'master'
_________________
< You are wrong! >
-----------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Switched to branch 'main'
4. 完成
最後にAAがランダムで変わるようにすれば、あっという間に完成です!
#!/bin/bash
readonly BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
if test $BRANCH_NAME = "master"; then
readonly CHARACTERS=(blowfish bud-frogs bunny cheese daemon default dragon
dragon-and-cow elephant eyes ghostbusters meow milk moose
ren satanic sheep small stegosaurus stimpy turkey turtle tux)
readonly CHARACTER=${CHARACTERS[$((RANDOM % ${#CHARACTERS[*]}))]}
cowsay -f $CHARACTER "You are wrong!"
echo ""
git switch main
fi
牛以外のAAも表示されるようになりました。
$ git switch master
Switched to branch 'master'
_________________
< You are wrong! >
-----------------
\
\
| .
. |L /|
_ . |\ _| \--+._/| .
/ ||\| Y J ) / |/| ./
J |)'( | ` F`.'/
-<| F __ .-<
| / .-'. `. /-. L___
J \ < \ | | O\|.-'
_J \ .- \/ O | | \ |F
'-F -<_. \ .-' `-' L__
__J _ _. >-' )._. |-'
`-|.' /_. \_| F
/.- . _.<
/' /.' .' `\
/L /' |/ _.-'-\
/'J ___.---'\|
|\ .--' V | `. `
|/`. `-. `._)
/ .-.\
VK \ ( `\
`.\
Switched to branch 'main'
まとめ
これやるぐらいなら全部mainにリネームしたほうが良い。
最後までお読みいただきありがとうございました。