糟屋郡はいいぞ

ツイッターで書くには文字数が足りないやつ。Amazonのアソシエイトとして、KasuyaMofuは適格販売により収入を得ています。

CLI上でgitのリモートリポジトリを確認・選択できてrebase mainするくんを作った #ISUCON

チームメンバーにブランチ名聞いたり、ブラウザ上でGitHubからブランチ名をコピー/ペーストするのが効率的でなかったので、CLI上で完結できるようにした。ついてにrebaseもする。

最低限のチェックはするようにしている。

hidennotare/switch-git.sh at main · KasuyaMofu/hidennotare · GitHub

#!/bin/bash

DEFAULT_BRANCH=main

function select-branch(){
  git branch -r | awk '
    {
      gsub(/[ \t]/,"", $0);
      gsub(/.*->/,"", $0);
      ln[NR]=$0;print NR") " $0
    }END{
      print "------"; 
      getline n < "/dev/tty";
      if(ln[n]==""){print "invalid"; exit}
      gsub(/[ \t]/,"", ln[n]);
      system("echo \""ln[n]"\"> ./branch.tmp;")
    }';
}  

function check-git-setting(){
  local FAULT=0;
  git config user.name  > /dev/null || { echo "please set \"git config --global user.name\"" ; FAULT=1; }
  git config user.email > /dev/null || { echo "please set \"git config --global user.email\""; FAULT=1; }
  if [ $FAULT -eq 1 ];then
    exit;
  fi
}

check-git-setting

git fetch

select-branch

if [ ! -f ./branch.tmp ]; then
  exit;
fi

echo -n "you selected: "
cat ./branch.tmp
echo "-----"

SELECTED_BRANCH=`cat ./branch.tmp`
rm ./branch.tmp
git -c advice.detachedHead=false -c status.AheadBehind=false -c branch.autoSetupRebase=always checkout $SELECTED_BRANCH
git log --oneline -3

実行はこんな感じ。すごく良い。すごく良いぞ。

$ ../switch-git.sh
1) origin/main
2) origin/bye-audience
3) origin/cache_dashboard
4) origin/main
------
3
you selected: origin/cache_dashboard
-----
HEAD is now at 4cd4ace Cache leaderboard to redis
4cd4ace (HEAD, origin/cache_dashboard) Cache leaderboard to redis
0edfc9d Add go-redis
5d45dd5 Add cache-control in dashboard