Help us understand the problem. What is going on with this article?

git pushでsimpleでもcurrent

More than 1 year has passed since last update.

push.default = current は楽だけど、ちゃんと tracking 設定したいなぁ。でも push.default = simple でいちいち -u つけるのは面倒だなぁ。」という人向けの zsh の設定。

.gitconfig の alias で設定したいけど、 git のコマンドは存在するコマンドを上書きさせてくれないので zsh で変更する。

まず、 setopt correctcorrect_all で修正を提示する感じをシミュレーションする。 SPROMPT にフォーマットが入っているので、 read で聞いて 0 から 3 の数値を返す。

function ask_ynae {
    local prompt=${SPROMPT/\%r/$1}
    while true; do
        read -rsk \?"$prompt" ynae
        case $ynae in
        [Yy] ) return 0 ;;
        "" | [Nn] ) return 1 ;;
        [Aa] ) return 2 ;;
        [Ee] ) return 3 ;;
        esac
        echo -ne "\r"
    done
}

実際に git をラップする部分。 \git のようバックスラッシュを使うと、置き換え前のコマンドを使える。組み込みの print コマンドは -z で次の編集中のコマンドにできる。

function in_git() {
    [[ "$(git rev-parse --is-inside-work-tree 2> /dev/null)" = "true" ]]
}
function wrapped_git() {
    if [[ "$*" = "push" ]] && in_git && ! (\git rev-parse --abbrev-ref @{upstream} >/dev/null 2>&1); then
        suggest="push -u origin $(\git rev-parse --abbrev-ref HEAD)"
        ask_ynae "git $suggest"
        exit_code=$?
        echo
        case $exit_code in
        "0" ) \git ${=suggest} ;;
        "1" ) \git $@ ;;
        "2" ) return 130 ;;
        "3" ) print -z "git $@" ;;
        esac
    else
        \git $@
    fi
}
alias git=wrapped_git
bitkey
独自のキーテクノロジーを武器に事業を展開するスタートアップベンチャー
https://bitkey.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away