はじめに
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にリネームしたほうが良い。
最後までお読みいただきありがとうございました。

コメント