git checkout
というコマンドは多機能である。故に2.23で2つのコマンドにするべきではという話になり、実際別れた2つのコマンドが実装された。
詳しくはそれぞれ調べてもらうとして、以下の2つに別れたわけである
switch | restore |
---|---|
ブランチの切り替え | ツリーファイルの巻き戻し |
単機能、つまりシンプルなのはいいことである。ただ念の為言っておくと一応実験的実装であり、かつ checkout は非推奨になったわけではない。
ただ新しい物好きなら食いつきたいところである。しかし使おうにもついついコマンド入力で git checkout
と入力してしまうので、注意してくれるような環境を用意した。
やったこと
git の機能には git hooks というものがあり、特定のコマンドが実行されたときに設定された処理が実行されるというものである。ただしコマンドによって発動タイミング(コマンド後or前)やそもそも発動できるかが決まっている。
checkout には post_checkout というものがあり、checkout実行後に発火するものがあったのでこれを使った。サンプルなどを使わず1から入れる場合、
- 適当なところに
post-checkout
のファイル名で実行するスクリプトを書く(おおよそ~/.git/hooks/
下。コンフィグファイルを別にまとめているならそこでもいいと思うがファイル名はpost-checkout
で置き場所は hooks というディレクトリの中に置く必要がある -
git config --global init.templatedir=~/.git/
を実行する(上記と違うところにファイルを作った場合hooks
ディレクトリが見える場所を指定する - 各リポジトリ下で
git init
コマンドを実行する
としてあげればいい。
最後の git init
を忘れてしまうと出てこない。また実行ファイルの名前と置き場所hooks下と決まっているので注意。拡張子は付けられないが perl や ruby のスクリプトでも実行できるようなのでそこはお好みで。
#!/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'? @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
$