# 选择工作区并获取项目

确认工作区、项目、Git main 写入策略和环境边界，通过百积木 CLI 检出平台项目。

开发开始前必须确定源码属于哪个工作区和项目。对于百积木平台项目，平台项目 Git 是源事实，本地目录只是开发检出；不要用一个本地目录代替平台项目生命周期。

## 确认工作区和项目

先回读默认工作区，再列出该工作区的项目：

```bash
baijimu workspace current
baijimu project list <workspaceId>
baijimu project get <projectId>
```

核对项目名称、项目类型和工作区归属。不要根据目录名猜测项目 ID，也不要把测试工作区中的同名项目当成生产项目。

> **工作区选择与平台健康是两件事**
>
> 已有项目属于哪个工作区，就使用该工作区。只有用户明确需要独立的成员、权限、计费、数据隔离或产品归属，或者目标项目尚无合适工作区时，才新建工作区；不要因为网络、DNS 或某个非官方域名不可访问就建议新建工作区。
>
> 平台访问状态只通过当前 CLI 的认证状态和目标命令验证：运行 `baijimu auth status --verify`，
> 再读取目标命令的分级 `--help` 并执行目标查询。Bundle 市场操作由 CLI 通过
> `https://api.baijimu.com` 的统一 Partner API 完成；`bundle-market.baijimu.com` 是已退役入口，
> DNS 不解析不是 Bundle 市场故障，也不能据此判断 CLI 需要升级。只有本机帮助缺少所需命令，
> 或实际命令明确报告版本不兼容时，才按版本契约处理升级。

## 读取项目分支策略

先读取项目当前的 `main` 写入策略：

```bash
baijimu project branch-policy get <projectId> \
  --workspace-id <workspaceId>
```

- `DIRECT` 是默认模式：有项目 Git 写权限的成员可以快进直推 `main`。
- `PROTECTED` 是显式开启的保护模式：成员必须推个人分支，再通过平台合并。

项目权限和分支策略是两个独立校验。不要因为用户已加入项目就假设能够直推，也不要因为另一个项目受保护就假设当前项目同样受保护。完整设计见[项目：Git main 写入策略](/concepts/projects/#git-main-写入策略)。

如果本机 CLI 没有 `project branch-policy`，先运行 `baijimu --version` 和对应命令的 `--help`，使用该版本的固定文档或升级 CLI，不要猜测策略和参数。

## 检出平台项目

使用 CLI 按项目当前策略检出平台 canonical Git 仓库：

```bash
baijimu project checkout <projectId> \
  --workspace-id <workspaceId> \
  --directory <projectDirectory>
```

目标目录必须尚不存在，CLI 不会覆盖现有目录。检出成功后进入输出中的目录，核对工作树和分支：

```bash
cd <projectDirectory>
git status
git branch --show-current
git remote -v
```

`DIRECT` 项目默认检出 `main`；`PROTECTED` 项目默认创建并检出当前用户的 `codex/<userId>/<branch>` 个人分支。只有明确需要自定义个人分支名时才按本机帮助增加 `--branch`。

## 打开项目前检查

确认以下信息后再启动 Codex：

| 对象        | 必须确认的事实                                                |
| --------- | ------------------------------------------------------ |
| 工作区       | `baijimu workspace current` 返回目标工作区。                   |
| 项目        | `baijimu project get <projectId>` 返回预期项目及类型。           |
| 本地目录      | 当前目录是刚检出的项目，不是另一个同名仓库。                                 |
| Git 策略与分支 | 已读取实际策略；`DIRECT` 使用 `main`，`PROTECTED` 使用 CLI 创建的个人分支。 |
| 环境        | 开发、测试或生产目标由项目自己的发布流程明确选择。                              |
| 项目规则      | 阅读仓库根目录及当前子目录适用的 `AGENTS.md`。                          |

> **本地仓库与平台项目不是同一个状态**
>
> 切换 CLI 默认工作区不会改变已经检出的仓库。切换项目时应打开对应目录；切换工作区后继续使用旧目录前，必须核对仓库配置、项目归属和目标环境。

## 提交平台项目

完成开发和验证后，先查看差异并提交：

```bash
git status
git diff
git add <files>
git commit -m "<message>"
```

### `DIRECT` 项目

同步远端 `main`，确认本地可以快进更新，再直接推送：

```bash
git switch main
git pull --ff-only origin main
git push origin main
```

远端已有新提交时，先处理并发变化后重新推送。任何情况下都不要强推、非快进覆盖或删除 `main`。

### `PROTECTED` 项目

推送当前个人分支，回读远端分支和 `main` 提交，再通过平台的原子合并接口更新受保护的 `main`：

```bash
git push origin <sourceBranch>
baijimu project branches <projectId> --workspace-id <workspaceId>
baijimu project merge <projectId> <sourceBranch> \
  --workspace-id <workspaceId> \
  --expected-main <mainCommit>
```

有项目 Git 写权限的用户可以合并自己的个人分支，不要求另一位成员代为操作。参数以本机 `baijimu project merge --help` 为准。

无论采用哪种策略，直推或合并只更新项目 Git，并不等于构建、发布、安装或正式环境验证；后续动作必须按项目类型执行。

下一步阅读[使用 Codex 开发](/development/codex-development/)。
