West Manifest + Monorepo:统一管理数十个 Git 仓库的嵌入式实践

2026/05/17

嵌入式产品软件往往由数十个 Git 仓库组成:内核、BSP、应用、文档、预编译产物……如何让它们整体可构建、可维护、好上手?这套实践采用 West manifest + monorepo 架构 统一管理,manifest 仓库只放"怎么组合"的元信息,不含业务代码。

一、West Manifest 作为"缝合器"

核心思想

West 的价值不在于构建,而在于把分散的 Git 仓库缝合成一个可整体操作的工作区。manifest 仓库不包含业务代码,只包含"怎么组合"的元信息。

实践要点

目录结构

manifest/
├── linux_full_west.yml       # Linux 完整版组合
├── rtos_rtthread_west.yml    # RT-Thread 精简版组合
├── docs/                      # 所有开发文档
├── skills/                    # 团队共享的 AI Skills
└── README.md                  # 快速开始

适用场景判断

特征适合 West不适合 West
构建入口在 workspace 层✅—
构建入口在单个仓库内部⚠️ 可用但不自然—
仓库之间有频繁的版本联动✅—
仓库之间基本独立—❌
需要精确锁定所有依赖版本✅—

二、代码组合(Combo)的组织方式

目录约定

每个代码组合在 manifest 仓库中独占一个子目录,自包含,不依赖外部约定:

manifest/
├── <combo-name>/
│   ├── west.yml              # 清单文件
│   ├── README.md             # 该组合的说明
│   └── workspace/            # 需放置到 workspace 根目录的文件
│       ├── CLAUDE.md
│       ├── .claude/
│       ├── .cursor/
│       └── .github/
├── <another-combo>/
│   └── ...
└── skills/                   # 所有组合共享

设计意图

三、Workspace 根目录的配置分发

问题

West 将 manifest 仓库克隆到 self.path 子目录(如 .manifest/),AI Agent 默认在 workspace 根目录查找配置——看不到埋在子目录里的文件。

workspace/                    (开发者工作目录)
├── CLAUDE.md       ──symlink──→  .manifest/workspace/CLAUDE.md
├── .claude/         ──symlink──→  .manifest/workspace/.claude/
├── .cursor/         ──symlink──→  .manifest/workspace/.cursor/
├── west.yml                    (west init 生成)
└── .manifest/                  (manifest 仓库本体)

通过 setup.sh 脚本在 west update 后自动创建符号链接。

多 Agent 适配

Agent入口文件说明
Claude CodeCLAUDE.md项目级指令
Claude Code.claude/skills/可复用的 Skill 定义
Cursor.cursor/rules/*.mdc项目规则
GitHub Copilot.github/copilot-instructions.md项目指令
Windsurf.windsurfrules项目规则
其他CONVENTIONS.md通用约定

所有文件的核心信息一致,只是格式适配各 Agent 的要求。

四、统一构建入口:West 扩展

原则

无论底层构建系统是什么,对开发者暴露的命令统一为 west <verb>。不应要求开发者"cd 到子目录再执行构建"。

实现

# 在 manifest 中引用扩展
- name: <soc>-scripts
  path: scripts
  west-commands: west-commands.yml

提供统一命令:

命令语义底层行为
west build构建项目找到主仓库,执行构建命令
west menuconfig配置项目执行配置命令
west clean清理产物执行清理命令

好处

五、集中式 Skills 管理

团队共用的 AI Agent Skills 集中放在 manifest 仓库的 skills/ 目录,通过符号链接安装到各成员的本地 Agent 配置目录。

目录结构

skills/
├── README.md
└── <skill-name>/
    ├── SKILL.md                # Skill 定义
    └── reference/              # 参考文档
        └── <补充文档>.md

亮点:分层文档结构

以 git-commit skill 为例:

基础 skill + 项目专用补充 的分层结构,复用性强。

安装方式

# 全局安装(所有项目可用)
ln -s <manifest-path>/skills/* ~/.claude/skills/

# 项目级安装
mkdir -p .claude/skills
ln -s ../../skills/* .claude/skills/

六、Git Commit 规范要点

参考 Linux Kernel AI 协作规范:

七、这套设计解决的问题

问题解法
多仓库如何组织成可构建的 workspaceWest manifest
入口文件太多记不住West 扩展统一命令
AI Agent 找不到配置workspace/ 分发 + symlink
团队 Skill 如何共享Manifest 仓库集中管理
多个产品变体独立 west.yml 共存
新同学上手慢拉下 manifest 仓库就全知道
不同 Agent 配置维护统一内容,格式适配

参考