最近他の方のリポジトリをforkして、remoteにoriginとは別に upstream としてfork元のリポジトリをセットすることが多く、

git remote add upstream git@github.com:<fork元user/fork元リポジトリ>

みたいに追加することが多いのですが、毎回これを打つのが面倒だったので、
“自分のuser名/リポジトリ名”
だけで、 upstream を設定するスクリプトを書いてみました。

準備するもの


  • もちろんgit
  • jq

関数を追加する


以下の関数を.zshrcとかに記述します。

git-remote-add-upstream() {
  if ! type jq > /dev/null 2>&1; then
    echo "'jq' is not installed." >&2
    exit 1
  fi
  if [ $# -ne 1 ]; then
    echo "Need repo name. e.g : 'user/repo'"
    exit 1
  fi
  local upstream=$(curl -L "https://api.github.com/repos/$1" | jq -r '.parent.full_name')
  if [ "$upstream" = "null" ]; then
    echo "upstream not found." >&2
    exit 1
  fi
  git remote add upstream "git@github.com:${upstream}.git"
}
alias grau='git-remote-add-upstream'

これで、 grau user/repo を入力することで、Github APIを叩いて取得したリポジトリの中から、
fork元のuser/repoを取得して、git remote add upstreamを実行します。
jqが入っていなかったり、user/repoが指定されていなかったり、APIでfork元が取得できなかった場合などは処理を中断するようにします。

あの長ったらしいコマンドを4文字に縮められたので個人的には満足しています。