generating-patches について
generating-patchesは、コードベースの変更を移植可能なGitパッチとして出力するスキルです。アップロードされたプロジェクトへのClaudeの編集をローカルリポジトリへ移す用途に向け、パッチの作成と適用方法を案内します。
主な機能
- 01作業ツリーまたはステージ済み差分の出力
- 02format-patchによるコミット情報の保持
- 03バイナリや大規模パッチへの対処
- 04ローカル適用とトラブルシューティングの案内
- 05パッチからのPR説明作成
活用シーン
- 01アップロードしたコードベースの編集の移行
- 02コミット済み変更のリポジトリ向けパッケージ化
- 03大規模パッチのファイル種別やディレクトリ別分割
- 04変更ファイルに基づくPR概要の準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oaustegard/ claude-skills --skill generating-patchesインストール後、Claude Code で/generating-patchesを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
パッチの生成
コードベースの変更から移植可能な Git パッチファイルを生成し、ユーザーが Claude による編集をローカルリポジトリに適用できるようにします。
使用するタイミング
アップロードされたコードベースのファイルを変更した後、ユーザーが変更をローカル環境に反映する必要がある場合に有効にします。一般的なワークフロー:ユーザーが ZIP をアップロード → Claude がファイルを編集 → このスキルが変更をパッチとしてエクスポートします。
前提条件
git が利用可能であり、作業ディレクトリが git リポジトリである(または初期化できる)ことを確認します。
git status 2>/dev/null || git init
git の履歴がないアップロード済みコードベースを扱う場合は、編集を行う前に初期化してベースラインコミットを作成します。
git init
git add -A
git commit -m "Baseline: original uploaded state"
パッチの生成
編集が完了したら、統合差分を生成します。
# For uncommitted changes (working tree modifications)
git diff > /mnt/user-data/outputs/changes.patch
# If changes are staged but not committed
git diff --cached > /mnt/user-data/outputs/changes.patch
# For both staged and unstaged
git diff HEAD > /mnt/user-data/outputs/changes.patch
コミット済みの変更の場合(コミットメッセージとメタデータを保持します):
# All commits since baseline
git format-patch --stdout baseline..HEAD > /mnt/user-data/outputs/changes.patch
# Or specify number of commits
git format-patch --stdout -n 3 > /mnt/user-data/outputs/changes.patch
エッジケースへの対応
バイナリファイル:Git の差分には、デフォルトではバイナリファイルが含まれません。バイナリファイルが変更された場合は、ユーザーに警告します。
git diff --name-only --diff-filter=M | xargs file | grep -v "ASCII\|UTF-8\|empty"
大規模なパッチ:変更が広範囲にわたる場合は、ディレクトリまたはファイルの種類ごとに分割することを検討します。
git diff -- "*.py" > /mnt/user-data/outputs/python-changes.patch
git diff -- src/ > /mnt/user-data/outputs/src-changes.patch
変更が検出されない場合:ファイルが実際に変更されたことを確認します。よくある原因:
- Git のツリー外にあるコピーを編集している
- ファイルが Git で追跡されていない(先に
git addが必要)
出力要件
必ず /mnt/user-data/outputs/ に、内容が分かるファイル名で出力します。ダウンロードリンクを提示します。
[Download changes.patch](computer:///mnt/user-data/outputs/changes.patch)
ユーザーへの手順
パッチを渡す際は、毎回以下の手順を含めます。
このパッチをローカルで適用する方法:
cd /path/to/your/repo
# Preview changes (dry run)
git apply --check changes.patch
# Apply to working tree
git apply changes.patch
format-patch の出力を使用する場合(コミットメタデータを含みます):
git am changes.patch
トラブルシューティング:
git apply --reject changes.patch— 適用可能な変更を適用し、競合がある箇所には.rejファイルを書き出しますgit apply -R changes.patch— 適用済みのパッチを元に戻しますgit apply --3way changes.patch— 競合時に三者間マージを有効にします
任意:PR の説明
依頼された場合は、パッチからプルリクエストの説明を生成します。
# Extract summary of changes
echo "## Summary"
git diff --stat
echo ""
echo "## Changes"
git diff --name-only | while read f; do echo "- \`$f\`"; done
GitHub の PR 本文に適した、変更内容とその理由の簡潔な説明を添えます。