AgentSkillsCN

commit-multi-repo

在提交子模块修改并将文档添加至主仓库时,可运用多仓库协同提交技能。首先逐一确认各仓库的变更内容,排除无用文件并完成暂存检查,随后按照“子模块 → 主仓库”的顺序依次提交。“多仓库提交”“子模块提交”“多仓库提交”“父子仓库提交”等关键词均可触发此技能。

SKILL.md
--- frontmatter
name: commit-multi-repo
description: サブモジュール内の修正をコミットし、本リポジトリにドキュメント類を追加する際のマルチリポジトリ対応コミットスキル。各リポジトリの変更を確認、不要ファイル除外、ステージング確認後、サブモジュール→本リポジトリの順序でコミット実行。「マルチリポジトリコミット」「サブモジュールコミット」「複数リポジトリのコミット」「親子リポジトリのコミット」などのフレーズで発動。

マルチリポジトリ対応コミットスキル

サブモジュールを含むリポジトリで、複数のリポジトリにまたがる変更を適切な順序でコミットします。

このスキルの目的

  1. 複数リポジトリの変更管理 - 親リポジトリとサブモジュールの変更を一括管理
  2. 不要ファイルの自動除外 - ビルド成果物・一時ファイル等を自動判定して除外
  3. 適切なコミット順序 - サブモジュール → 本リポジトリの順序でコミット
  4. 確認プロセス - ステージング対象をユーザーに確認してからコミット

前提条件

  • Git リポジトリであること
  • サブモジュールが設定されていること(.gitmodules が存在)

処理フロー

フェーズ 1: 変更の検出と分析

1.1 サブモジュールの検出

bash
# リポジトリルートに移動
cd {repository_root}

# サブモジュール一覧を取得
git submodule status --recursive

1.2 各リポジトリの変更確認

本リポジトリ(親):

bash
# 親リポジトリの変更確認
git status --porcelain

各サブモジュール:

bash
# サブモジュールごとに変更確認
cd {submodule_path}
git status --porcelain

フェーズ 2: 不要ファイルの自動除外

2.1 除外ルールの適用

変更されたファイルに対して除外ルールを適用します。 詳細は references/exclusion-rules.md を参照してください。

2.2 除外対象の判定

bash
# 変更ファイル一覧を取得
git status --porcelain | while read -r status file; do
  # 除外ルールに該当するか判定
  # 該当する場合は除外リストに追加
done

2.3 除外ファイルの報告

各リポジトリごとに除外されたファイルと理由を表示:

code
📁 サブモジュール: libs/common
  
  ❌ 除外されたファイル:
    - dist/bundle.js (ビルド成果物)
    - node_modules/... (依存関係ディレクトリ)
    - .DS_Store (一時ファイル)
  
  ✅ ステージング対象:
    - src/utils.ts
    - README.md

フェーズ 3: ステージング確認

3.1 確認内容の提示

各リポジトリごとに以下を表示:

  1. ステージング対象ファイル一覧
  2. 除外されたファイルと理由
  3. 変更内容の概要(追加/変更/削除ファイル数)

3.2 ユーザー確認

🚨 重要:必ずユーザーに確認を取ってください 🚨

ask_user ツールを使用して以下を確認:

code
以下の変更をコミットします。よろしいですか?

📁 サブモジュール: libs/common
  - 変更: 3ファイル(追加: 1, 変更: 2, 削除: 0)
  - 除外: 5ファイル

📁 本リポジトリ
  - 変更: 2ファイル(追加: 2, 変更: 0, 削除: 0)
  - 除外: 1ファイル

[続行] / [キャンセル] / [詳細を表示]

フェーズ 4: サブモジュールのコミット

4.1 サブモジュールごとにコミット

🚨 重要:サブモジュールを先にコミットしてください 🚨

各サブモジュールで以下を実行:

bash
cd {submodule_path}

# ステージング(除外ファイル以外)
git add {staging_files}

# 変更内容の確認
git diff --cached --stat
git diff --cached

# コミットメッセージ生成(日本語)
# 変更内容を分析して適切なメッセージを生成

4.2 コミットメッセージの生成規則

🚨 重要:コミットメッセージは必ず日本語で生成してください 🚨

変更内容から適切なプレフィックスを判定:

変更タイププレフィックス
新機能追加feat:feat: ユーザー認証機能を追加
バグ修正fix:fix: APIレスポンスの形式を修正
ドキュメントdocs:docs: README更新
リファクタリングrefactor:refactor: 共通処理を抽出
テストtest:test: 単体テストを追加
スタイルstyle:style: コードフォーマット修正
設定変更chore:chore: 依存関係を更新

コミットメッセージフォーマット:

code
{プレフィックス}: {変更内容の要約(日本語)}

変更内容:
- {詳細1}
- {詳細2}

変更ファイル:
- {ファイル1}
- {ファイル2}

4.3 コミット実行

bash
git commit -m "{生成したコミットメッセージ}"

# コミット成功を確認
git log --oneline -1

フェーズ 5: 本リポジトリのコミット

5.1 サブモジュール参照の更新確認

サブモジュールのコミット後、親リポジトリでサブモジュール参照が更新されます:

bash
cd {repository_root}

# サブモジュール参照の変更を確認
git status

# 出力例:
# modified:   libs/common (new commits)

5.2 ステージングと確認

bash
# サブモジュール参照 + その他の変更をステージング
git add {staging_files}

# ステージング内容確認
git diff --cached --stat

5.3 本リポジトリのコミットメッセージ生成

サブモジュール更新を含むコミットメッセージ:

code
{プレフィックス}: {変更内容の要約(日本語)}

変更内容:
- {詳細1}
- {詳細2}

サブモジュール更新:
- libs/common: {サブモジュールのコミットメッセージ要約}

例:

code
docs: サブモジュール概要ドキュメントを追加

変更内容:
- 各サブモジュールの概要説明を追加
- アーキテクチャ図を更新

サブモジュール更新:
- libs/common: feat: 共通ユーティリティを追加
- libs/api: fix: APIレスポンス形式を修正

5.4 コミット実行

bash
git commit -m "{生成したコミットメッセージ}"

# コミット成功を確認
git log --oneline -1

フェーズ 6: 結果報告

コミット完了後、以下の情報を報告:

code
✅ マルチリポジトリコミット完了

📁 サブモジュール: libs/common
  - コミット: abc1234
  - メッセージ: feat: 共通ユーティリティを追加
  - ファイル数: 3

📁 サブモジュール: libs/api
  - コミット: def5678
  - メッセージ: fix: APIレスポンス形式を修正
  - ファイル数: 2

📁 本リポジトリ
  - コミット: ghi9012
  - メッセージ: docs: サブモジュール概要ドキュメントを追加
  - ファイル数: 4

エラーハンドリング

サブモジュールコミット失敗時

🚨 重要:サブモジュールのコミット失敗時は処理を中止してください 🚨

code
❌ コミット失敗

📁 サブモジュール: libs/common
  - エラー: {エラーメッセージ}
  
⚠️ 処理を中止しました。
   サブモジュール libs/common のコミットに失敗したため、
   後続の処理は実行されていません。

🔄 ロールバックオプション:
   1. 変更を確認して再試行
   2. 手動でコミット
   3. 変更を取り消す

ロールバック対応

サブモジュールでコミット完了後に本リポジトリでエラーが発生した場合:

bash
# コミット済みサブモジュールをロールバック
cd {submodule_path}
git reset --soft HEAD^

# ステージングは維持されるため、再コミット可能

エラー種別と対応

エラー対応
サブモジュールが未初期化git submodule update --init を提案
サブモジュールでコンフリクトコンフリクト解消を案内して中止
ステージング対象が空「変更がありません」として正常終了
コミットメッセージ生成失敗手動入力を求める
本リポジトリコミット失敗サブモジュールのロールバックを提案

注意事項

  • 🚨 コミットメッセージは必ず日本語を使用してください(英語は禁止)🚨
  • サブモジュールは必ず先にコミットしてください(参照整合性のため)
  • 除外ルールは references/exclusion-rules.md で管理されています
  • ユーザー確認を省略しないでください
  • このスキルはコミットのみ実行し、プッシュは行いません

典型的なワークフロー

code
[サブモジュール検出] --> git submodule status で一覧取得
        |
[変更確認] --> 各リポジトリの変更を確認
        |
[除外判定] --> 不要ファイルを自動除外
        |
[ユーザー確認] --> ステージング対象の確認
        |
        +--> キャンセル --> [終了]
        |
[サブモジュールコミット] --> 各サブモジュールで順次コミット
        |
        +--> 失敗 --> [エラー報告・中止]
        |
[本リポジトリコミット] --> 親リポジトリでコミット
        |
        +--> 失敗 --> [ロールバック提案]
        |
[結果報告] --> 全コミット情報を表示

使用例

基本的な使用

code
マルチリポジトリコミットスキルを使用して、
サブモジュールと本リポジトリの変更をコミットしてください。

特定のサブモジュールのみ

code
libs/common サブモジュールと本リポジトリの変更のみをコミットしてください。
他のサブモジュールの変更は無視してください。

関連ファイル

  • references/exclusion-rules.md - 除外ルール定義