1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git checkout を叩いたら git switch か git restore 使わないの?って言われるようにした

Last updated at Posted at 2019-10-03

git checkout というコマンドは多機能である。故に2.23で2つのコマンドにするべきではという話になり、実際別れた2つのコマンドが実装された。

詳しくはそれぞれ調べてもらうとして、以下の2つに別れたわけである

switch restore
ブランチの切り替え ツリーファイルの巻き戻し

単機能、つまりシンプルなのはいいことである。ただ念の為言っておくと一応実験的実装であり、かつ checkout は非推奨になったわけではない。

ただ新しい物好きなら食いつきたいところである。しかし使おうにもついついコマンド入力で git checkout と入力してしまうので、注意してくれるような環境を用意した。

やったこと

git の機能には git hooks というものがあり、特定のコマンドが実行されたときに設定された処理が実行されるというものである。ただしコマンドによって発動タイミング(コマンド後or前)やそもそも発動できるかが決まっている。

checkout には post_checkout というものがあり、checkout実行後に発火するものがあったのでこれを使った。サンプルなどを使わず1から入れる場合、

  1. 適当なところに post-checkout のファイル名で実行するスクリプトを書く(おおよそ ~/.git/hooks/ 下。コンフィグファイルを別にまとめているならそこでもいいと思うがファイル名は post-checkout で置き場所は hooks というディレクトリの中に置く必要がある
  2. git config --global init.templatedir=~/.git/ を実行する(上記と違うところにファイルを作った場合 hooks ディレクトリが見える場所を指定する
  3. 各リポジトリ下で git init コマンドを実行する

としてあげればいい。

最後の git init を忘れてしまうと出てこない。また実行ファイルの名前と置き場所hooks下と決まっているので注意。拡張子は付けられないが perl や ruby のスクリプトでも実行できるようなのでそこはお好みで。

hooks/post-checkout
#!/bin/bash

echo -e ""
echo -e "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
echo -e "@     WHY DON'T YOU USE 'git switch' or 'git restore'?     @"
echo -e "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
echo -e ""

単純に使わないの?だけならこういうのでいい。若干主張が激しいが。

実行するとこんな感じになる

$ git checkout .
Updated 0 paths from the index

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WHY DON'T YOU USE 'git switch' or 'git restore'?     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

$
1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?