こんにちは!ウィルゲート開発室 開発基盤ユニット マネージャー池添です。
皆さん、git使ってますか?gitといえば色々出来る便利コマンドcheckoutですが、これを使用出来ないようにするための方法を紹介していきます。 ちなみに、このネタは社内LT会ように突貫で作ったものなので、生暖かく見ていただけると幸いです。
背景
そもそもなぜ git checkout
を禁止するのか、ですがgit 2.23から git checkout
は git switch
と git restore
に機能が分離されました。
これは git checkout
に機能が多くあり、初学者にとって覚えづらいという問題があったため、ブランチ操作は git switch
にファイルのリストア操作は git restore
に分離されることになりました。
既存である git checkout
も残るため git checkout
で使い慣れてる方はいままで通り git checkout
を使うことも可能です。
なぜ禁止するのか
git checkout
は今まで通り使えるので、特段今までと使い方を変える必要性はないです。
ですが、逆に今まで通り使えてしまうがゆえに、新しいコマンドである git switch
を覚えづらいという問題もあります。
そこで、 git checkout
を実行したときに、 git switch
を使うようにエラーが表示されれば、 git switch
を使うようになり覚えるのではないかと思いました。
(ちなみに git restore
は git status
を実行した際のリストア操作の説明にちゃんと git restore
を使って操作出来る旨が書いてあるので、個人的に覚えやすいと思っています。)
git aliasで禁止にする
git には alias という仕組みがあります。私は git checkout
と入力するのが面倒だったので git ch
で実行出来るように alias を作成していました。
# ~/.gitconfig [alias] ch = checkout
もともとgit aliasでcheckoutを使っていた人はここを書き換えることで簡単に禁止にすることが出来ます。
# ~/.gitconfig [alias] ch = !echo "git switch/restore をつかってね!"
$ git ch . git switch/restore をつかってね !
このように git ch
を実行したときに switch/restore
を実行するように警告を出す事ができました。
ですが、この方法はもともとaliasを作っていてそのaliasに慣れてた人に限ります。
標準の checkout
コマンドを使い慣れてる人だとaliasに慣れる必要がありswitchコマンドに慣れるのと同等のコストがかかります。
gitコマンドのラッパーを作る
git aliasでは標準コマンドそのものに対してaliasを作ることはできません。(aliasではないですからね)
そこでgitコマンド自体のラッパーを作り、gitではなくbashなどのaliasに登録する事で実行出来ないようにしてみました。
# ~/git.sh #!/bin/bash -eu function git { # checkoutコマンドのとき if [ "$1" = "checkout" -o "$1" = "ch" ]; then if [ -e $2 ]; then # restore操作のとき echo "Restore operations using the git checkout command are not recommended."; echo ' use "git restore '$2'"'; return; fi; echo "Branch operations using the git checkout command are not recommended."; echo ' use "git switch '$2'"'; return; fi; # checkout 以外のとき command git $@; } git $@ # ※このスクリプトは簡易的に作ったものであり、すべての動作を担保しているものではありません。 # 既知の不具合としてgit commit -m "hoge"などの引数に文字列を渡す物が正しく動作しないことを確認しています。
このようなラッパースクリプトでcheckoutコマンドを実行時に警告を出すようにします。
そしてこのラッパースクリプトを~/.bashrc
などに登録します。
# ~/.bashrc ・・・(略) alias git='~/git.sh'
$ git checkout main Branch operations using the git checkout command are not recommended. use "git switch main"
このように git checkout
のときにも git switch
を使うように促す警告文を出すことが出来ました。
まとめ
git checkout
を禁止して git switch
あるいは git restore
のコマンドを推奨する方法を二種類紹介しました。
一つはgitのaliasを使ったやり方で、もう一つはgitコマンドのラッパースクリプトを作成しbashなどのaliasにgitコマンドとして登録するやり方を紹介しました。
もともとは社内のLTネタとして作ったものですが、みなさんのgit checkout
脱却のために少しでも役に立てれば幸いです。