| name | sync-submodules |
| description | tqer39 の全リポジトリを git submodule として同期する。「サブモジュールを同期」「サブモジュールを更新」「repos-context を最新にしたい」「新しいリポジトリを追加した」などの指示で必ず実行。submodule、同期、更新、最新化といったキーワードが含まれる場合もトリガーすること。 |
Sync Submodules
tqer39 GitHub アカウントの全リポジトリを git submodule として同期するスキル。
不足リポジトリの追加と、既存サブモジュールのデフォルトブランチ最新化を行う。
手順
ステップ 1: リポジトリ一覧の取得
以下のコマンドをそのまま実行する。gh api や他のコマンドで代替しないこと。gh repo list はページネーションを自動処理するため、全リポジトリを確実に取得できる。
gh repo list tqer39 --limit 1000 --no-archived --json name,isFork,defaultBranchRef
--no-archived でアーカイブ済みリポジトリは取得時点で除外される。このコマンドで 40 件以上のリポジトリが返ると期待される。30 件程度しか返らない場合はコマンドが正しく実行されているか確認すること。
ステップ 2: フィルタリング
取得結果から以下を除外する:
| 除外条件 | 理由 |
|---|
name: "repos-context" | 自己参照の防止 |
name: ".github" | 既存の .github/ ディレクトリ(workflows 等)と衝突する |
isFork: true | フォークは一時的・実験的なものが多い |
defaultBranchRef: null | 空リポジトリ(コミットなし)は submodule 追加不可 |
除外したリポジトリの一覧と理由をユーザーに報告する。
ステップ 3: 既存サブモジュールの確認
.gitmodules ファイルを Read ツールで読み取り、既存のサブモジュール名を一覧化する。
ステップ 4: 不足サブモジュールの追加
ステップ 2 の結果とステップ 3 の既存一覧を比較し、不足しているリポジトリを追加する。
git submodule add https://github.com/tqer39/{repo_name} {repo_name}
サブモジュール数が多い場合、複数の Bash ツール呼び出しを並列で発行して効率化する。ただし、1 件の失敗が他に波及しないよう、各 git submodule add は独立した Bash 呼び出しとして実行する(&& チェインで連結しない)。失敗したサブモジュールはスキップし、ステップ 7 でユーザーに報告する。
ステップ 5: 全サブモジュールを最新化
既存・新規を問わず、全サブモジュールでデフォルトブランチの最新を取得する。
git submodule update --remote は使わないこと。このコマンドはデフォルトブランチを正しく追跡しない場合がある。代わりに、以下の 3 コマンドをサブモジュールごとに実行する。各リポジトリの正しいデフォルトブランチへ確実に切り替わる。
デフォルトブランチはリポジトリごとに異なる(main / master / trial / javascript / feature 等)。ステップ 1 で取得した defaultBranchRef.name の値を必ず使用し、決め打ちしないこと。
git -C {repo_name} fetch origin
git -C {repo_name} checkout {default_branch}
git -C {repo_name} pull origin {default_branch}
サブモジュール数が多い場合(10 以上)、複数の Bash ツール呼び出しを並列で発行して効率化する。たとえば 5 つずつまとめて並列実行する。
最新化後、更新があったサブモジュールを staging する:
git add {repo_name}
全サブモジュールに対して git add を実行すれば、更新の有無にかかわらず安全に staging できる。
ステップ 6: 不要サブモジュールの検出と削除
.gitmodules に存在するがステップ 2 の結果に含まれないサブモジュールを検出する。
検出されたサブモジュールについて、gh repo view でリポジトリの状態を確認する:
gh repo view tqer39/{repo_name} --json isArchived,name 2>&1
ステップ 7: 結果報告
git status
git diff --stat
以下をユーザーに報告する:
- 追加したサブモジュールの一覧
- 更新されたサブモジュールの一覧
- 不要と検出されたサブモジュール(あれば)
- 除外されたリポジトリの一覧と理由
コミットはユーザーの指示を待つ。
注意事項
gh CLI が認証済みであること(gh auth status で確認可能)
- ネットワーク接続が必要
- private リポジトリも
gh 認証で取得・clone 可能だが、他の環境から参照する場合は別途認証が必要となる