mizdra's poem

雑なこと (日記/技術ポエム/メモ/…) を書くブログです. 真に受けないでください.

2018-08-29

シェルのカスタマイズ

最近でかいプロジェクトで開発していてGit関連の操作が辛くなってきたので, シェルの設定を見直すことにした. とりあえず以下のようなaliasやキーバインドを張ってみた.

[alias]
    CLEAR = reset --hard HEAD
    co = checkout
    sclone = clone --depth 1
    pu = !git push -u origin $(git symbolic-ref --short HEAD)
    refresh= !git fetch origin && git remote prune origin
# zsh
function peco-select-branch () {
    local branch=$(git branch -v  --sort=-authordate | peco | cut -c 3- | awk '{ print $1 }')
    if [ -n "$branch" ]; then
      if [ -n "$LBUFFER" ]; then
        local new_left="${LBUFFER%\ } $branch"
      else
        local new_left="$branch"
      fi
      BUFFER=${new_left}${RBUFFER}
      CURSOR=${#new_left}
    fi
}
zle -N peco-select-branch
bindkey '^b' peco-select-branch

それぞれのコマンドの使い方と役割は次の通り.

  • git CLEAR
    • ステージ及び作業ディレクトリの状態を HEAD と同じにする
    • ゴミが残っていて他のブランチにチェックアウトできない時に便利
    • 作業ディレクトリの変更が吹き飛ぶ非常に危険なコマンドなので, 大文字にした
  • git co <branch>
    • ただの checkout のalias
  • git sclone <repository>
    • 最新のコミット以外は取得しない点以外は git clone <repository> と同じ
    • サンプルリポジトリなどをcloneするとき, 最新のコミットだけ見れれば良くて過去のコミットは不要なため, こういうコマンドがあると便利
    • scloneshallow clone から
  • git pu
    • カレントブランチを origin に同じブランチ名で push し, トラッキングする
    • 一度トラッキングするように設定すれば, 以降は git push だけでよくなる
  • git refresh
    • origin から fetch した後, origin から既に削除されたブランチをローカルリポジトリから削除する
    • リモートリポジトリで削除したけどローカルリポジトリでは削除せず放置しているとブランチが溜まるので, 定期的にこのコマンドで整理すると良い
  • peco-select-branch()
    • ^b でpecoを使ってブランチを検索できる
    • ブランチは
    • gitのbranch選択をpecoで楽にする。をベースにカスタマイズしている
      • 最近作成したブランチが上に来るようにした
      • ブランチの最新のコミットのハッシュとコミットメッセージを表示するようにした

youtu.be