LoginSignup
42
3

More than 1 year has passed since last update.

Gitでmainと間違えてmasterにswitchすると「You are wrong!」と怒られるようにする方法

Last updated at Posted at 2022-06-16

はじめに

2020年10月、GitHubでデフォルトブランチの名前が master から main に変わりました。これを機に私の手元には main がデフォルトのリポジトリと master がデフォルトのリポジトリが混在するようになりました。リポジトリごとに main と master のどちらかを覚えることは人智を超えているのでしょう。つい間違えて main のリポジトリで master に switch してしまうことがあります。

そこで、間違えて master に switch すると「You are wrong!」と怒られるプラグインを作ってみました。おまけとして main ブランチに自動で移動する機能もつけました。以下ではその作り方を説明します。

example.png

動作環境

動作を確認している環境は以下のとおりです。

  • 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に以下の内容を記述します。

.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 ブランチも作っておく必要があります。これについてはもっといい方法があるかもしれません。

.git/hooks/post-checkout
#!/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がランダムで変わるようにすれば、あっという間に完成です!

.git/hooks/post-checkout
#!/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にリネームしたほうが良い。

最後までお読みいただきありがとうございました。

42
3
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
3