Git Subtree
Git Subtree は、プロジェクト内 に他 の Git リポジトリを埋 め込 む別 の方法 で、Submodule より使 いやすいです。
共有 repo を作成
この repo は複数
のプロジェクトで共有
するリソースを保存
します(例
:.claude/skill):
mkdir claude-skill
cd claude-skill
git init
mkdir skill
echo "echo 'Hello from skill'" > skill/demo.sh
git add .
git commit -m "initial commit of skill"
git branch -M main
git remote add origin https://github.com/your-org/claude-skill.git
git push -u origin main共有
repo が完成
し、他
のプロジェクトから pull/push できます。ここの
skill/ は repo 内
のディレクトリで、後
でプロジェクト内
の .claude/skill に対応
します。プロジェクト A で Git を作成
mkdir project-A
cd project-A
git init
git remote add origin https://github.com/your-org/project-A.git
git branch -M main
git add .
git commit -m "initial commit for project-A"
git push -u origin mainorigin→ プロジェクト自体 のリモート- 次 に subtree をプロジェクトに統合 します
Subtree を追加
# 1. リモート共有 repo を追加
git remote add claude https://github.com/your-org/claude-skill.git
git fetch claude
# 2. subtree を統合
git subtree add --prefix=.claude/skill claude main --squashパラメータ説明
| パラメータ | 説明 |
|---|---|
--prefix=.claude/skill | プロジェクト内 に subtree を配置 するディレクトリ |
claude | リモート名 (URL ではない)、どの repo かを Git に伝 える |
main | リモートブランチまたは commit、どのブランチを pull するか |
--squash | subtree の commit を単一 の commit に圧縮 (プロジェクト履歴 を保護 ) |
結果
project-A/
└─ .claude/
└─ skill/
└─ demo.shこれでプロジェクト A は .claude/skill の内容
を直接
使用
できます。
Subtree を更新
共有 repo から新 しい内容 を pull:
cd project-A
git fetch claude
git subtree pull --prefix=.claude/skill claude main --squashこれでリモートの最新
内容
が .claude/skill に更新
されます。
原理
:リモートを fetch → プロジェクトディレクトリに統合
→ commit を圧縮
プロジェクトの修正を共有 repo にプッシュ
プロジェクト A で .claude/skill を修正
し、claude-skill に同期
したい場合
:
git subtree push --prefix=.claude/skill claude main| パラメータ | 説明 |
|---|---|
push | プロジェクト内 の subtree の修正 をリモートにプッシュ |
--prefix | プロジェクト内 の subtree ディレクトリを指定 |
claude | リモート名 |
main | プッシュ先 のリモートブランチ |
複数プロジェクトでの共有
プロジェクト B でも同様 に操作 :
git remote add claude https://github.com/your-org/claude-skill.git
git fetch claude
git subtree add --prefix=.claude/skill claude main --squash操作 フローはプロジェクト A と同 じです。共有 repo の更新 やプッシュも同 じコマンドを使用 します。
よく使う Subtree コマンドまとめ
| 機能 | コマンド | 説明 |
|---|---|---|
| subtree を追加 | git subtree add --prefix=.claude/skill claude main --squash | プロジェクトに初 めて共有 repo を統合 |
| 更新 を pull | git subtree pull --prefix=.claude/skill claude main --squash | 共有 repo からプロジェクト内 の subtree を更新 |
| 修正 をプッシュ | git subtree push --prefix=.claude/skill claude main | プロジェクトの修正 を共有 repo に送信 |
Submodule vs Subtree
| 特性 | Submodule | Subtree |
|---|---|---|
| Clone 方法 | 追加
で --recurse-submodules が必要 | 直接 clone できる |
| 更新 方法 | 2層 の commit | 単一 の commit |
| 履歴 記録 | 分離 された履歴 | プロジェクト履歴 に統合 |
| 適用 シナリオ | バージョンを正確 に制御 する必要 がある場合 | シンプルな共有 リソース |