new は、指定したリポジトリを (必要なら GitHub 上で作成し)、ghq で取得し、ローカルの作業ディレクトリに cd するための zsh 関数です。
- 引数に応じて owner/repo の解決と clone URL の正規化を行います
- 既存リポジトリでもOK(作成はしない/取得して移動するだけ)
- repo を作るケースでは
--public / --privateを指定できます(デフォルトは--private)
- zsh
- GitHub CLI:
gh(認証済みであること) ghq(ghq rootとghq getが使えること)- Git
new <repo-name|owner/repo|git-url> [--public|--private]--public/--privateのどちらか(省略時は--private)- 可視性フラグが不正な場合はエラーで終了します
gh api user -q .loginで自分の GitHub ログイン名を取得しownerにするgh repo create owner/repo --private|--public --confirmを試みる- すでに存在する場合でも、
gh repo view owner/repoが通ればそのまま続行
- すでに存在する場合でも、
ghq getで取得し、ghq root/github.com/owner/repoに移動
- リポジトリ作成はしない(既存前提)
git@github.com:owner/repo.gitに正規化してghq get- 取得後に同様に移動
- SSH形式:
git@github.com:owner/repo(.git) - HTTPS形式:
https://github.com/owner/repo(.git) - どちらも
owner/repoを抽出し、ghq getして移動
# 自分のリポジトリを private で作って開く(デフォルト private)
new my-new-repo
# public で作って開く
new my-open-repo --public
# 既存リポジトリを取得して開く
new cli/cli
new git@github.com:cli/cli.git
new https://github.com/cli/cli- 引数が空の場合は usage を表示して終了します
- 可視性フラグは
--publicまたは--privateのみ受理します ghq getが失敗しても|| trueで握りつぶすので、- すでに取得済み(あるいは失敗した)ケースでも次へ進みます
- 最終的に
cdに失敗するとそこで止まります(setopt err_return)
cd先は$(ghq root)/github.com/$owner/$repo固定です
→ghqの配置ルールを変えている場合は期待どおりにならない可能性があります
~/.zshrc に関数定義を貼り付けたら、シェルを再読込します。
source ~/.zshrc