平台工程

Git 初始化已有工作区并建 GitHub 仓库 · 嵌套仓库用 submodule 引入 + MCP 无权限时 gh CLI 兜底

入档:2026-08-14 来源:WorkBuddy 全案实例汇总项目初始化,Claw 工作区(含 knowledge-base 独立仓库、vibe-demos、Python 脚本)建 GitHub 仓库 状态:全流程跑通并验证(本地 git init → submodule → 远程仓库创建 → push 成功)

一句话总结

已有工作区建 GitHub 仓库的正解:嵌套子仓库用 submodule 引入(不是塞进去),MCP connector 无 create_repository 权限时用 gh CLI 兜底(zip 解压即用,凭据走 Windows Credential Manager)。本地已有的 .git 子目录不要删、不要强行 add,用 git submodule add 正正经经挂上。

破除两个常见误解

  1. 「把已有 git 仓库塞进新仓库就行」 ❌ —— git add 会把它当嵌套仓库存一个 gitlink(空壳),内容不会跟过去,clone 时拉不到。必须用 git submodule add,让 git 知道这是一个独立仓库的引用。
  2. 「MCP connector 有 GitHub 权限就能建仓库」 ❌ —— connector 的 token scope 决定权限。读/写已有仓库通常有,但 create_repository 需要 repo scope(或 public_repo),403 就是权限不够,不是操作错了。

为什么这么选(决策链)

已有工作区含 knowledge-base(独立 GitHub 仓库,有未推送 commit)+ vibe-demos(无 git)+ Python 脚本。三条路:

迁移判据:当子目录已是独立 git 仓库、且需要保持独立 push/pull 能力时,用 submodule。如果子目录内容完全属于主项目、不需要独立仓库,直接删 .git 再 add 更简单。

可照做(完整步骤)

  1. 备份子仓库(防操作失误):cp -r knowledge-base /tmp/kb-backup
  2. 移出子仓库:rm -rf knowledge-base(git submodule add 要求目录不存在)
  3. init 主仓库:git init && git branch -m main
  4. 写 .gitignore:排除 .workbuddy/__pycache__/、IDE 文件等
  5. 写 .gitmodules:
    [submodule "knowledge-base"]
        path = knowledge-base
        url = https://github.com/用户名/knowledge-base.git
  6. submodule 引入:git submodule add <url> knowledge-base
  7. 写 README.md:说明目录结构、submodule 用法
  8. 提交:git add . && git commit -m "init: ..."
  9. 建远程仓库:
    • 有 gh CLI:gh repo create <name> --public --source . --push
    • 无 gh CLI 或权限不够:装 gh CLI(见下)再跑
  10. 同步子仓库:cd knowledge-base && git pull --rebase && git push(处理未推送 commit)

gh CLI 无安装时的兜底方案

MCP connector 403 时,装 gh CLI 最快:

# 下载 zip(不要用 msi,Windows Installer 可能静默失败)
curl -sL -o "$TEMP/gh.zip" \
  "https://github.com/cli/cli/releases/download/v2.97.0/gh_2.97.0_windows_amd64.zip"

# 解压(注意:zip 内路径是 bin/gh.exe,不是 gh_x.x.x_windows_amd64/bin/gh.exe)
mkdir -p ~/bin && cd ~/bin
unzip -o "$TEMP/gh.zip" "bin/gh.exe" && mv bin/gh.exe . && rm -rf bin

# 验证
./gh.exe --version

认证:gh CLI 会读 Windows Credential Manager 里 gh:github.com:<username> 的凭据。如果之前用过 gh CLI 登录过,凭据还在,新装的 gh 直接可用(gh auth status 确认)。没用过的话需要 gh auth login(交互式,需要浏览器)。

关键设计点 / 踩坑

边界

关联文档

类型/平台工程主题/Git主题/GitHub