Split Main Sub Repo
目標
將現有專案拆分為:
- 公開子倉:
<project>(不含 AI/私有開發資料) - 私有主倉:
<project>-dev(保留 AI 開發資料,並以 submodule 引入子倉)
互動規則
- 先問問題再動手,且一次只問一題。
- 先展示預設值,再問「要補充或修改嗎」。
- 未拿到明確答案前,不執行 destructive 操作。
固定預設
- 命名規則固定:子倉
<project>、主倉<project>-dev - 先套用嚴格排除清單(含
CLAUDE.md),再詢問使用者是否補充/修改。
嚴格排除清單(預設)
.claude/.serena/.beads/skills/AGENTS.mdCLAUDE.mddocs/plans/tmp/sandbox/*.bin*.key*.pem.env*
執行流程
1) 收集細節(逐題)
依序確認:
- 專案基底名稱(不含
-dev) - GitHub owner/org
- 主倉可見性是否為 private、子倉可見性是否為 public
- 排除清單要不要補充或刪減
- 是否要同步改本機資料夾名稱
2) 盤點與備份
- 檢查工作樹是否乾淨;若不乾淨,先詢問如何處理。
- 產生「保留於主倉」與「放入子倉」兩份清單並讓使用者確認。
- 必要時建立備份分支或 tag。
3) 建立公開子倉
- 依排除清單建立乾淨內容。
- 確認不包含 AI/私有資料。
- 初始化 git、設定 remote、提交初版並推送。
4) 建立私有主倉
- 保留完整開發資料。
- 將公開子倉加入為 submodule(路徑名與子倉名一致)。
- 更新
.gitmodules、主倉 README、開發流程文件。
5) 驗證
至少執行:
git status --short(主倉/子倉都乾淨)git submodule status(主倉)git remote -v(主倉/子倉 URL 正確)- 搜尋排除項是否還留在公開子倉
6) 回報
回報必須包含:
- 主倉/子倉 repo URL
- 最新 commit SHA
- 實際套用的排除清單
- 尚未完成的項目(若有)
可用資源
- 預設排除清單:
references/default-excludes.txt - 排除清單組裝工具:
scripts/merge_excludes.py