Git
小ネタ
git-hooks
QiitaEngineerFesta2022
0
どのような問題がありますか?

投稿日

更新日

Organization

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

はじめに

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

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

sample.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にリネームしたほうが良い。

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

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ユーザー登録ログイン
OUDOON
yumemi
みんな知ってるあのサービスも、ゆめみが一緒に作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用の内製化支援。Swift,Kotlin,Rust,Go,Flutter,ML,React,AWS等エンジニア・クリエイターの会社です。Twitterで情報配信中https://twitter.com/yumemiinc

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
深層学習の論文について解説してみた
~
Zoom API/SDKを使ってみよう!
~
0
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー