ブラウザからforkすると遅いのでCLIからfork & cloneするスクリプトを書いた
目次
モチベーション⌗
GitHubにホストされているOSSにPRを出す時にforkしてからローカルにcloneするが、ブラウザのforkボタンを使ってforkすると時間がかかることが多くストレスに感じていた。
そのためCLI上でforkとcloneを行うスクリプトを書いた。
これまでの手順は以下のような手順が必要だった。
- ブラウザでforkボタンを押す
- forkの完了を待つ
- ブラウザに表示されるcloneコマンドをコピー(
gh repo clone owner/repo
みたいなやつ) - ターミナルでコマンドを実行してforkしたリポジトリをcloneする
これを以下のステップでできるようにした。
- リポジトリのURLまたは
OWNER/REPO
形式の文字列をコピー - コマンドに1. で取得した文字列を渡して実行
つくったスクリプト⌗
以下を.zshrc
などに追加すると使えるようになる。alias
の部分はお好みで。1
function git-fork-clone() {
# 入力からowner/repoを取り出す。owner/repoのような形式でもURLでもOK
REPO=$(echo $1 | sed -E 's@.+github.com/([^/]+)/([^/]+).*@\1/\2@')
echo "🐙 ${REPO} will be forked and cloned.\\n"
# -- 以降のオプションはgit cloneに渡される
# See: https://cli.github.com/manual/gh_repo_fork
gh repo fork ${REPO} --default-branch-only --clone=true -- --filter=blob:none
}
alias gf=git-fork-clone
前提⌗
gh
コマンドがインストールされていること。
使い方⌗
$ git-fork-clone https://github.com/cli/cli
上記を実行すると以下のような出力が表示され、リポジトリのforkとcloneが行われる。
🐙 cli/cli will be forked and cloned.
✓ Created fork kyu08/cli
Cloning into 'cli'...
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 31 (delta 0), reused 10 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (31/31), 20.41 KiB | 10.20 MiB/s, done.
From github.com:cli/cli
* [new branch] main -> upstream/main
* [new tag] v1.0.1 -> v1.0.1
✓ Cloned fork
以下のような形式でも動く。
git-fork-clone https://github.com/cli/cli/pulls
git-fork-clone cli/cli
まとめ⌗
また人類のOSS貢献力を加速させてしまいました。
-
完全に余談だがスクリプトの
REPO=...
の部分は https://www.tutorialspoint.com/execute_bash_online.php を使って出先で書いた。スマホでもシェルスクリプトが書けて便利。 ↩︎
Read other posts