自動化ツールの条件分岐などに使用している git コマンドです。bash と git 2.x 系で作成しています。
$ から始まる行 ⇒ コマンド
> から始まる行 ⇒ 出力結果
# から始まる行 ⇒ 筆者からの説明
PATH ⇒ 任意のディレクトリパス
FILE ⇒ 任意のファイル
BRANCH ⇒ 任意のブランチ名
git status はそこが git 管理下であれば結果を標準出力し、そうでなければ標準エラー出力でメッセージを出す。以下のコマンドは、git 管理下にあるパス内では結果は必ず空になる。
$ git -C PATH status -s 2>&1 > /dev/null | awk '{print $1}
# PATH が git 管理下の場合
> (結果なし)
# PATH が git 管理下である場合
> fatal: not a git repository (or any parent up to mount point /)
$ git -C PATH rev-parse --abbrev-ref HEAD
> main
指定したブランチで、ローカルでコミット済みだがリモートに無いコミットを表示する。
$ git -C PATH log --pretty=format:"%h" origin/BRANCH..HEAD
> 73e8891
セマンティックバージョニングの形式のタグうち、一番数字の大きいものを抽出する。
タグ付けのタイミングは考慮せず、数字の大きさのみを比較している。
$ git -C PATH tag | sed s/^v//g | sort -t . -n -k1,1 -k2,2 -k3,3 | tail -n1
> 0.0.2
git -C PATH tag
sed s/^v//g
sort -t . -n -k1,1 -k2,2 -k3,3
tail -n1