🐈

GitHub CLI で fork を最新にする

2022/12/18に公開

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