🐈
GitHub CLI で fork を最新にする
GitHub CLI で fork を最新にする
GitHub で Fork を最新に同期する でブラウザ上で fork を最新にする方法を説明した。
このページの参考サイト に GitHub CLI を使ってフォークのブランチを同期する
という項目があり、GitHub CLI で fork を最新にする方法が載っている。
$ gh repo sync owner/cli-fork -b BRANCH_NAME
同期するリポジトリが一つの場合はこれでいいのですが、自分のアカウントのすべてに対して最新にしようとすると一つずつ呼び出す必要があり、手間なので一括で更新する方法を説明する。
結論
※ 列挙するリポジトリ数が 200 以内の場合
gh repo list --limit 200 --fork --json nameWithOwner --jq '.[].nameWithOwner' | xargs -n1 gh repo sync
alias (実行するコマンドを表示)
alias syncfork='gh repo list --limit 200 --fork --json nameWithOwner --jq '\''.[].nameWithOwner'\'' | xargs -I{} -n1 sh -x -c "gh repo sync {}"'
説明
gh repo list コマンドによるリポジトリの列挙
gh repo list コマンドで自分のアカウントのリポジトリのリストを取得できる。
以下のように
gh repo list --fork --json nameWithOwner --jq '.[].nameWithOwner'
-
--fork
を指定することで fork のみ列挙できる -
--json nameWithOwner
を指定することで オーナー名付のリポジトリ名を取得できる -
--jq '.[].nameWithOwner'
を指定することで配列の中のnameWithOwner
要素を指定できる。
なおデフォルトではリストアップするリポジトリ数は 30 となっているので、30 以上のリポジトリを列挙したい場合は --limit 200
のように列挙数の上限を指定する。(ここでは 200個)
gh repo list --limit 200 --fork --json nameWithOwner --jq '.[].nameWithOwner'
gh repo sync コマンドによる同期
以下の形式で、オーナー名/リポジトリ名
の形で gh repo sync
を実行することにより指定したリポジトリを同期できる。
gh repo sync owner/cli-fork
前の gh repo list --fork --json nameWithOwner --jq '.[].nameWithOwner'
の結果を
xargs -n1
に渡してやることにより、リポジトリひとつずつ gh repo sync
を実行して一括同期する。
Discussion