CodeX多仓库提交Skill搭建

Codex 多仓库提交 Skill 搭建

这个 skill 解决的问题是:多个 Git 仓库每天都要拉代码、分析改动、提交、推送,如果每次都靠手动输入命令或临时告诉 Codex 规则,容易漏步骤、提交错文件、忘记 push、误提交测试文件或 .env 文件。把规则写成 skill 后,Codex 每次都会按同一套流程处理。

一、最终效果

创建完成后,你可以在 Codex 里这样使用:

text 复制代码
使用 $multi-repo-submit,拉取当前仓库最新代码
text 复制代码
使用 $multi-repo-submit,提交当前仓库代码
text 复制代码
使用 $multi-repo-submit,拉取所有工作区最新代码
text 复制代码
使用 $multi-repo-submit,提交所有工作区代码

在这个 skill 里,语义固定为:

text 复制代码
拉取代码 = 只拉取,不提交,不推送
提交代码 = 拉取最新代码 + 分析变更 + 排除测试/忽略文件 + 中文 commit + push
提交并推送 = 和提交代码一致
只提交不推送 = commit 后不 push
只分析 = 不暂存、不提交、不推送

所以如果你说:

text 复制代码
使用 $multi-repo-submit,提交当前仓库代码

它默认包含 git push

二、为什么这么做

多个工作区分别对应多个仓库时,最容易出错的是这些地方:

  • 忘记先拉取远端最新代码。
  • 在错误仓库里提交。
  • 提交了测试文件。
  • 提交了 .env、日志、缓存、构建产物。
  • 使用 git add . 把无关文件一起提交。
  • 提交说明太笼统,例如"修改代码"。
  • commit 了但忘记 push。
  • 自动拉取时遇到冲突,误操作导致本地改动丢失。

这个 skill 的核心设计是:

  • SKILL.md 负责写固定流程。
  • repositories.yaml 负责写仓库清单。
  • git_preflight.sh 负责只读预检仓库状态。
  • openai.yaml 负责 Codex UI 显示信息。
  • 每天 8:30 自动拉取用 Codex Automation 实现,不放在 skill 自己里面。

这样做的好处是:流程和仓库清单分开。以后新增仓库,只改 repositories.yaml,不用改主规则。

三、最终目录结构

创建完成后目录如下:

text 复制代码
<CODEX_HOME>/skills/multi-repo-submit
├── SKILL.md
├── agents
│   └── openai.yaml
├── references
│   └── repositories.yaml
└── scripts
    └── git_preflight.sh

各文件作用:

text 复制代码
SKILL.md
主规则文件。定义拉取、提交、推送、排除文件、冲突处理等规则。

references/repositories.yaml
仓库清单。以后新增仓库、禁用仓库、修改仓库路径、修改远端地址,都改这里。

scripts/git_preflight.sh
只读预检脚本。用于查看仓库状态、分支、远端、upstream 和变更统计。

agents/openai.yaml
Codex UI 元信息。比如显示名称、简介、默认提示词。

四、不同系统上的 Skill 目录在哪里

先记住一个原则:skill 不是放在"代码仓库目录"里,也不一定放在"Codex 程序安装目录"里,而是放在 Codex Home 目录里。

本文用 <CODEX_HOME> 表示 Codex Home。

默认情况下:

text 复制代码
macOS 默认 CODEX_HOME = ~/.codex
Windows 默认 CODEX_HOME = %USERPROFILE%\.codex

如果安装或配置 Codex 时指定了自定义位置,例如 Windows 上指定到:

text 复制代码
D:\codex

并且这个目录就是 Codex 的配置/数据目录,那么:

text 复制代码
CODEX_HOME = D:\codex
skill 目录 = D:\codex\skills\multi-repo-submit

如果只是把 Codex 程序安装在 D 盘,但配置目录仍然在用户目录下,那 skill 仍然应该放在默认的:

text 复制代码
%USERPROFILE%\.codex\skills\multi-repo-submit

所以在操作前,先确认 Codex Home。后面所有路径都按这个规则推导:

text 复制代码
skill 目录 = <CODEX_HOME>/skills/multi-repo-submit

如果不确定 Codex Home 在哪里,可以在 Codex 里直接问:

text 复制代码
请帮我确认当前电脑的 CODEX_HOME 是哪里,以及 multi-repo-submit 应该安装到哪个目录。

也可以自己在终端里看。

macOS:

bash 复制代码
echo "${CODEX_HOME:-$HOME/.codex}"

Windows:

powershell 复制代码
if ($env:CODEX_HOME) {
  $env:CODEX_HOME
} else {
  "$env:USERPROFILE\.codex"
}

macOS

默认 skill 目录是:

text 复制代码
~/.codex/skills/multi-repo-submit

完整路径类似:

text 复制代码
/Users/你的用户名/.codex/skills/multi-repo-submit

如果 macOS 上使用了自定义 Codex Home,例如:

text 复制代码
/Users/你的用户名/dev/codex

那么 skill 目录就是:

text 复制代码
/Users/你的用户名/dev/codex/skills/multi-repo-submit

macOS 推荐先设置变量,再创建目录。默认路径写法:

bash 复制代码
export CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
export SKILL_DIR="$CODEX_HOME/skills/multi-repo-submit"

mkdir -p "$SKILL_DIR/agents"
mkdir -p "$SKILL_DIR/references"
mkdir -p "$SKILL_DIR/scripts"

如果是自定义路径,先把 CODEX_HOME 改成真实目录:

bash 复制代码
export CODEX_HOME="/Users/你的用户名/dev/codex"
export SKILL_DIR="$CODEX_HOME/skills/multi-repo-submit"

mkdir -p "$SKILL_DIR/agents"
mkdir -p "$SKILL_DIR/references"
mkdir -p "$SKILL_DIR/scripts"

Windows

默认 skill 目录是:

text 复制代码
%USERPROFILE%\.codex\skills\multi-repo-submit

完整路径类似:

text 复制代码
C:\Users\你的用户名\.codex\skills\multi-repo-submit

如果 Windows 上使用了自定义 Codex Home,例如:

text 复制代码
D:\codex

那么 skill 目录就是:

text 复制代码
D:\codex\skills\multi-repo-submit

PowerShell 默认路径写法:

powershell 复制代码
if (-not $env:CODEX_HOME) {
  $env:CODEX_HOME = "$env:USERPROFILE\.codex"
}

$SkillDir = Join-Path $env:CODEX_HOME "skills\multi-repo-submit"

New-Item -ItemType Directory -Force (Join-Path $SkillDir "agents")
New-Item -ItemType Directory -Force (Join-Path $SkillDir "references")
New-Item -ItemType Directory -Force (Join-Path $SkillDir "scripts")

PowerShell 自定义路径写法,例如放在 D:\codex

powershell 复制代码
$env:CODEX_HOME = "D:\codex"
$SkillDir = Join-Path $env:CODEX_HOME "skills\multi-repo-submit"

New-Item -ItemType Directory -Force (Join-Path $SkillDir "agents")
New-Item -ItemType Directory -Force (Join-Path $SkillDir "references")
New-Item -ItemType Directory -Force (Join-Path $SkillDir "scripts")

Windows 上建议安装 Git for Windows。这样既有 git 命令,也有 Git Bash,可以运行本文里的 git_preflight.sh。如果没有 Git Bash,skill 仍然可以使用,因为 Codex 可以直接执行 Git 命令;只是这个 Bash 预检脚本不一定能直接运行。

后面创建四个文件时,不要再死记默认路径。只要记住:

text 复制代码
SKILL.md              放在 <CODEX_HOME>/skills/multi-repo-submit/SKILL.md
repositories.yaml     放在 <CODEX_HOME>/skills/multi-repo-submit/references/repositories.yaml
git_preflight.sh      放在 <CODEX_HOME>/skills/multi-repo-submit/scripts/git_preflight.sh
openai.yaml           放在 <CODEX_HOME>/skills/multi-repo-submit/agents/openai.yaml

如果 <CODEX_HOME>D:\codex,那就全部放到 D:\codex\skills\multi-repo-submit 下面。

五、创建第一个文件:SKILL.md

这个文件是最重要的规则文件。

文件路径:

macOS:

text 复制代码
<CODEX_HOME>/skills/multi-repo-submit/SKILL.md

Windows:

text 复制代码
<CODEX_HOME>\skills\multi-repo-submit\SKILL.md

你可以用任意文本编辑器创建这个文件。下面是当前实际使用的内容,可以直接复制。

markdown 复制代码
---
name: multi-repo-submit
description: 多仓库 Git 拉取、提交和推送流程。用于用户要求 Codex 处理一个或多个独立工作区仓库,例如拉取代码、更新代码、分析改动、提交代码、提交并推送、只提交不推送、只分析改动,或处理 asso、daizhang、aicloud、ronda 以及 repositories.yaml 中登记的其他仓库。
---

# 多仓库提交

本 skill 规范多个独立 Git 仓库的日常拉取、分析、提交和推送流程。默认仓库清单在 `references/repositories.yaml` 中维护;流程规则在本文件中维护。

## 用户指令语义

按以下规则解释用户说法:

- "拉取代码"、"更新代码"、"同步代码":只拉取最新代码,不暂存、不提交、不推送。
- "提交代码":执行完整流程,包含拉取最新代码、分析变更、排除测试文件和忽略文件、生成中文提交说明、提交并推送。
- "提交并推送":与"提交代码"含义一致。
- "只提交不推送":拉取、分析、暂存并提交,但不执行 `git push`。
- "只分析"、"检查改动"、"看看哪些文件要提交":只分析变更,不执行拉取以外的写操作,不暂存、不提交、不推送;如果用户明确说不要拉取,也不要拉取。
- "推送代码":只推送已有本地提交,不创建新提交;推送前先 fetch 并确认远端状态。
- "四个工作区"、"所有工作区"、"全部仓库"、"每个仓库":读取 `references/repositories.yaml`,只处理 `enabled: true` 的仓库。
- 指定仓库名称时,只处理指定仓库,例如 `asso`、`daizhang`、`aicloud`、`ronda`。
- "当前仓库":只处理当前工作目录所在 Git 仓库;若当前仓库未登记,仍可处理,但最终总结要说明未登记。

## 仓库配置

处理多仓库请求前,读取 `references/repositories.yaml`。

使用规则:

- 按配置文件中的顺序逐个处理仓库。
- 只处理 `enabled: true` 的仓库,除非用户明确指定未启用仓库。
- 不假设仓库之间共享分支、远端、技术栈或提交内容。
- 新增仓库时,只更新 `references/repositories.yaml`,不要改本流程。
- 可以运行 `scripts/git_preflight.sh <仓库路径>` 做只读预检;该脚本只读取状态并执行 `git fetch --prune`,不会提交或推送。

## 禁止事项

- 不使用 `git add .`。
- 不提交测试文件,除非用户明确说允许包含测试文件。
- 不提交忽略文件、临时文件、缓存、构建产物、日志或密钥配置。
- 不执行 `git reset --hard`、`git checkout -- <file>`、`git clean`、丢弃改动或覆盖用户改动,除非用户明确要求。
- 不执行 `git push --force` 或 `git push --force-with-lease`,除非用户明确要求并确认仓库和分支。
- 不自动设置 upstream。缺少 upstream 时,停止当前仓库并报告。
- 不自动解决冲突后继续提交。冲突出现时,先报告冲突文件和当前状态。
- 不把不同仓库的改动合并成一个判断;每个仓库独立分析、独立提交、独立推送。

## 单仓库流程

对每个仓库按以下顺序执行。

### 1. 确认仓库

运行:

```bash
pwd
git rev-parse --show-toplevel
git branch --show-current
git status -sb
git remote -v
```

确认当前目录、仓库根目录、当前分支、远端和变更状态。

### 2. 检查 upstream

运行:

```bash
git rev-parse --abbrev-ref --symbolic-full-name @{u}
```

如果没有 upstream:

- 停止当前仓库。
- 报告仓库名称、路径和当前分支。
- 不猜测 upstream,不自动执行 `git push -u`。

### 3. 获取远端状态

运行:

```bash
git fetch --prune
git status -sb
git log --oneline --decorate --left-right HEAD...@{u}
```

判断本地与远端是否一致、落后、领先或分叉。

### 4. 拉取最新代码

拉取类请求和提交类请求都要先同步最新代码。

如果本地落后远端且本地没有独立提交,使用:

```bash
git pull --ff-only
```

如果本地有提交且远端也有新提交,使用:

```bash
git pull --rebase --autostash
```

如果出现冲突:

```bash
git status --short
```

然后停止当前仓库,报告冲突文件,不继续暂存、提交或推送。

如果用户只是"拉取代码",到这里结束当前仓库并汇总结果。

### 5. 分析变更文件

提交类请求必须分析所有变更文件:

```bash
git status --short
git diff --stat
git diff
```

将文件分类为:

```text
应提交:本次任务相关源码、配置或文档
排除测试:测试文件,默认不提交
排除忽略:忽略文件、临时文件、缓存文件、构建产物、日志、密钥配置
排除无关:与本次任务无关的用户改动
需要确认:归属不清或风险较高的文件
```

只允许暂存"应提交"文件。若没有应提交文件,不创建提交。

### 6. 排除测试文件

默认不提交以下测试文件:

```text
**/__tests__/**
**/test/**
**/tests/**
**/*.test.*
**/*.spec.*
**/*_test.*
**/*Test.*
```

如果检测到测试文件变更,最终总结中说明已按规则排除。只有用户明确说"允许包含测试文件"或"这次测试文件也提交"时,才可以提交测试文件。

### 7. 排除忽略文件和生成文件

默认不提交:

```text
.DS_Store
*.log
*.tmp
*.bak
*.swp
.env
.env.*
coverage/**
dist/**
build/**
output/**
node_modules/**
.cache/**
.pytest_cache/**
__pycache__/**
.playwright-cli/**
```

必要时用下面命令确认文件是否被忽略:

```bash
git check-ignore -v <path>
```

不要使用 `git add -f` 强制添加忽略文件,除非用户明确要求。

注意:已经被 Git 跟踪的文件即使后来被写入 `.gitignore`,仍然会出现在变更中,需要正常分析,不能只凭 `.gitignore` 判断。

### 8. 暂存文件

只能显式暂存确认要提交的文件:

```bash
git add <file1> <file2>
```

如果一个文件里混有相关和无关改动,使用:

```bash
git add -p <file>
```

### 9. 提交前检查

提交前必须运行:

```bash
git diff --cached --stat
git diff --cached
```

确认暂存区没有测试文件、忽略文件、构建产物、临时文件或无关改动。

如果暂存区为空,不创建提交。

### 10. 校验

优先使用 `references/repositories.yaml` 中对应仓库的 `validate` 配置。

如果 `validate: auto`,根据仓库文件判断可用校验命令,例如:

```text
package.json
pnpm-lock.yaml
yarn.lock
package-lock.json
Makefile
pyproject.toml
go.mod
Cargo.toml
```

不要为了提交默认运行明显长耗时或破坏性的命令。若无法判断合适校验命令,最终总结中说明"未找到明确校验命令"。

测试文件排除规则只影响提交内容,不影响运行测试或校验命令。

### 11. 中文提交说明

提交说明必须使用中文,并准确总结当前仓库本次实际提交内容。

推荐:

```text
修复账单列表筛选异常
优化云服务配置加载流程
调整关联数据提交逻辑
补充工作区状态处理
```

避免:

```text
修改代码
更新文件
提交代码
fix
update
```

如果一个仓库中存在多组明显独立的改动,优先拆成多个提交;如果用户只是要求提交当前仓库改动,可以创建一个聚焦的中文提交。

### 12. 提交

运行:

```bash
git commit -m "<中文提交说明>"
git status -sb
git log --oneline -1
```

记录提交哈希。

如果用户要求"只提交不推送",到这里结束当前仓库并汇总结果。

### 13. 推送

提交类请求默认推送:

```bash
git push
```

如果 push 被拒绝:

- 不强制推送。
- 重新运行 `git fetch --prune`。
- 用 `git status -sb` 和 `git log --oneline --decorate --left-right HEAD...@{u}` 分析原因。
- 需要 rebase 或处理冲突时,先说明状态,再继续。

## 最终总结

每个仓库都要简洁汇总:

- 仓库名称和路径
- 当前分支
- 拉取结果
- 提交的文件
- 排除的测试文件
- 排除的忽略文件、临时文件或构建产物
- 中文提交说明
- 提交哈希
- 推送结果
- 校验命令和结果,或未校验原因

如果某个仓库因冲突、无 upstream、push 被拒绝、无应提交文件或文件归属不清被跳过,要明确说明原因。

六、创建第二个文件:repositories.yaml

这个文件是仓库清单。

文件路径:

macOS:

text 复制代码
<CODEX_HOME>/skills/multi-repo-submit/references/repositories.yaml

Windows:

text 复制代码
<CODEX_HOME>\skills\multi-repo-submit\references\repositories.yaml

下面是当前使用的配置结构。示例里 Git 地址写成了"填写真实 Git 地址"。主要替换:

  • defaults.root
  • 每个仓库的 path
  • 每个仓库的 remote
  • 必要时替换 default_branch
  • 必要时替换 upstream

注意:remote 位置必须换成真实 Git 地址。

Windows 路径建议在 YAML 里使用正斜杠,例如:

yaml 复制代码
path: "C:/Users/ronhe/Documents/software/code/asso"

不要写成:

yaml 复制代码
path: "C:\Users\ronhe\Documents\software\code\asso"

因为反斜杠在 YAML 字符串里容易产生转义问题。

yaml 复制代码
# 多仓库提交配置
#
# 新增仓库时,在 repositories 下追加一项即可。
# 不要在本文件保存密码、token、私钥或其他敏感凭据。

defaults:
  root: "/Users/ronhe/Documents/software/code"
  push_after_commit: true
  commit_language: "zh-CN"
  include_test_files: false
  include_ignored_files: false
  pull_before_commit: true
  pull_strategy: "safe"
  validation_mode: "auto"
  exclude_patterns:
    - "**/__tests__/**"
    - "**/test/**"
    - "**/tests/**"
    - "**/*.test.*"
    - "**/*.spec.*"
    - "**/*_test.*"
    - "**/*Test.*"
    - ".DS_Store"
    - "*.log"
    - "*.tmp"
    - "*.bak"
    - "*.swp"
    - ".env"
    - ".env.*"
    - "coverage/**"
    - "dist/**"
    - "build/**"
    - "output/**"
    - "node_modules/**"
    - ".cache/**"
    - ".pytest_cache/**"
    - "__pycache__/**"
    - ".playwright-cli/**"

repositories:
  - name: "aisso"
    enabled: true
    path: "/Users/ronhe/Documents/software/code/asso"
    remote: "填写真实 Git 地址,例如 git@example.com:team/aisso.git"
    default_branch: "main"
    upstream: "origin/main"
    validate: "auto"
    notes: "前端含 pnpm 项目,后端含 pyproject.toml。"

  - name: "daizhang"
    enabled: true
    path: "/Users/ronhe/Documents/software/code/daizhang/AgentFinancial"
    remote: "填写真实 Git 地址,例如 git@example.com:team/AgentFinancial.git"
    default_branch: "main"
    upstream: "origin/main"
    validate: "auto"
    notes: "Git 根目录是 daizhang/AgentFinancial;前端含 pnpm lint,后端含 ruff 配置。"

  - name: "aicloud"
    enabled: true
    path: "/Users/ronhe/Documents/software/code/ronhe/aicloud"
    remote: "填写真实 Git 地址,例如 git@example.com:team/aicloud.git"
    default_branch: "main"
    upstream: "origin/main"
    validate: "auto"
    notes: "前端含 pnpm lint,后端含 ruff 配置。"

  - name: "ronda"
    enabled: true
    path: "/Users/ronhe/Documents/software/code/ronda"
    remote: "填写真实 Git 地址,例如 git@example.com:team/aicloud-rongda.git"
    default_branch: "main"
    upstream: "origin/main"
    validate: "auto"
    notes: "前端含 pnpm lint,后端含 ruff 配置。"

candidate_scan:
  enabled: false
  root: "/Users/ronhe/Documents/software/code"
  max_depth: 4
  rule: "扫描只能发现候选 Git 仓库;未登记仓库不参与全部仓库提交流程,除非用户明确指定。"

如何得到真实值:

bash 复制代码
git -C /真实/仓库/路径 rev-parse --show-toplevel
git -C /真实/仓库/路径 remote get-url origin
git -C /真实/仓库/路径 branch --show-current
git -C /真实/仓库/路径 rev-parse --abbrev-ref --symbolic-full-name @{u}

Windows PowerShell 也可以运行同样的 Git 命令,只要 Git 已安装:

powershell 复制代码
git -C "C:/真实/仓库/路径" rev-parse --show-toplevel
git -C "C:/真实/仓库/路径" remote get-url origin
git -C "C:/真实/仓库/路径" branch --show-current
git -C "C:/真实/仓库/路径" rev-parse --abbrev-ref --symbolic-full-name "@{u}"

七、创建第三个文件:git_preflight.sh

这个文件是只读预检脚本。它不是必须的,但建议创建。Codex 可以用它快速了解仓库状态。

文件路径:

macOS:

text 复制代码
<CODEX_HOME>/skills/multi-repo-submit/scripts/git_preflight.sh

Windows:

text 复制代码
<CODEX_HOME>\skills\multi-repo-submit\scripts\git_preflight.sh

Windows 上如果要运行这个 .sh 文件,建议用 Git Bash。没有 Git Bash 也不影响 skill 的核心规则,Codex 仍然可以直接执行 Git 命令。

文件内容如下:

bash 复制代码
#!/usr/bin/env bash
set -euo pipefail

repo="${1:-.}"

cd "$repo"

echo "仓库根目录:"
git rev-parse --show-toplevel

echo
echo "当前分支:"
git branch --show-current

echo
echo "当前状态:"
git status -sb

echo
echo "远端信息:"
git remote -v

echo
echo "上游分支:"
if git rev-parse --abbrev-ref --symbolic-full-name '@{u}' >/dev/null 2>&1; then
  git rev-parse --abbrev-ref --symbolic-full-name '@{u}'
else
  echo "未设置 upstream"
fi

echo
echo "获取远端最新状态:"
git fetch --prune

echo
echo "fetch 后状态:"
git status -sb

echo
echo "本地与上游差异:"
if git rev-parse --abbrev-ref --symbolic-full-name '@{u}' >/dev/null 2>&1; then
  git log --oneline --decorate --left-right HEAD...'@{u}' || true
else
  echo "未设置 upstream,无法比较"
fi

echo
echo "变更文件:"
git status --short

echo
echo "变更统计:"
git diff --stat || true

echo
echo "暂存区统计:"
git diff --cached --stat || true

macOS 上给脚本加执行权限:

bash 复制代码
chmod +x "$SKILL_DIR/scripts/git_preflight.sh"

macOS 测试:

bash 复制代码
"$SKILL_DIR/scripts/git_preflight.sh" /真实/仓库/路径

Windows Git Bash 测试:

bash 复制代码
/c/Users/你的用户名/.codex/skills/multi-repo-submit/scripts/git_preflight.sh /c/真实/仓库/路径

如果 Windows 上自定义 Codex Home 是 D:\codex,Git Bash 里对应路径通常写成:

bash 复制代码
/d/codex/skills/multi-repo-submit/scripts/git_preflight.sh /c/真实/仓库/路径

这个脚本只会执行状态检查和 git fetch --prune,不会 git add、不会 git commit、不会 git push

八、创建第四个文件:openai.yaml

这个文件是 Codex UI 信息。

文件路径:

macOS:

text 复制代码
<CODEX_HOME>/skills/multi-repo-submit/agents/openai.yaml

Windows:

text 复制代码
<CODEX_HOME>\skills\multi-repo-submit\agents\openai.yaml

文件内容如下:

yaml 复制代码
interface:
  display_name: "多仓库提交"
  short_description: "按固定规则拉取分析并中文提交推送多个仓库"
  default_prompt: "Use $multi-repo-submit 提交并推送所有启用仓库,提交说明使用中文。"

policy:
  allow_implicit_invocation: true

九、创建完成后怎么确认可用

重启 Codex app,或者新开一个 Codex 线程。

在输入框中输入:

text 复制代码
$multi-repo-submit

如果能找到,说明 skill 被识别。

也可以直接说:

text 复制代码
使用 $multi-repo-submit,分析当前仓库改动,不要提交,不要推送

如果 Codex 能按这个规则分析,说明已经可以使用。

十、每天早上 8:30 自动拉取代码

这个功能不是 SKILL.md 自己完成的,而是用 Codex Automation 定时调用 skill。

推荐只自动拉取,不自动提交。原因是:

text 复制代码
拉取代码适合自动化
提交代码不适合无人值守自动化

每天自动提交可能误提交文件,或者把不该推送的内容推到远端。

推荐创建的 Automation

在 Codex 里说:

text 复制代码
创建一个每天北京时间早上 8:30 运行的 Codex Automation,名称叫"每日拉取工作区代码"。运行目录使用我的代码根目录。任务内容是:使用 $multi-repo-submit,拉取所有工作区最新代码。只执行拉取/同步流程,不提交、不推送。读取 <CODEX_HOME>/skills/multi-repo-submit/references/repositories.yaml,只处理 enabled: true 的仓库;如果这台电脑使用自定义 Codex Home,请把 <CODEX_HOME> 换成真实路径。每个仓库先检查状态、upstream 和远端差异,再安全拉取。遇到冲突、本地改动阻塞、无 upstream 或网络失败时,停止当前仓库,不自动解决冲突,不提交,不推送,继续处理其他仓库。最终用中文汇总每个仓库的拉取结果。

如果在 Windows 上,路径要按 Windows 实际情况写,例如:

text 复制代码
运行目录使用 C:/Users/你的用户名/Documents/software。

如果在 macOS 上,可以写:

text 复制代码
运行目录使用 /Users/你的用户名/Documents/software。

自动拉取遇到冲突怎么办

不会自动解决冲突。

默认行为是:

text 复制代码
停止当前仓库
报告冲突文件
不暂存
不提交
不推送
继续处理其他仓库
最终汇总

之后你可以手动让 Codex 处理:

text 复制代码
使用 $multi-repo-submit,分析 asso 当前冲突,先不要提交

十一、后续新增仓库

只改这个文件:

text 复制代码
<CODEX_HOME>/skills/multi-repo-submit/references/repositories.yaml

repositories: 下追加:

yaml 复制代码
  - name: "新仓库名"
    enabled: true
    path: "/真实/仓库/路径"
    remote: "填写真实 Git 地址"
    default_branch: "main"
    upstream: "origin/main"
    validate: "auto"
    notes: "新增仓库。"

Windows 路径建议写成:

yaml 复制代码
path: "C:/Users/你的用户名/Documents/software/code/新仓库名"

新增后,可以让 Codex 测试:

text 复制代码
使用 $multi-repo-submit,分析 新仓库名 改动,不要提交,不要推送

十二、最推荐的日常用法

每天自动拉取:

text 复制代码
每天 8:30 自动拉取所有工作区最新代码,只拉取,不提交,不推送。

平时提交当前仓库:

text 复制代码
使用 $multi-repo-submit,提交当前仓库代码

平时提交所有仓库:

text 复制代码
使用 $multi-repo-submit,提交所有工作区代码

只看改动:

text 复制代码
使用 $multi-repo-submit,分析所有工作区改动,不要提交,不要推送

核心原则:

text 复制代码
固定流程写进 SKILL.md
仓库清单写进 repositories.yaml
每天自动拉取用 Codex Automation
提交和推送保留人工触发
相关推荐
埃博拉酱1 小时前
ZEISS Microscopy Installer、ZLMT 及 ZEN 系列软件均因 FlexNet Publisher DLL 崩溃而闪退
后端
fliter1 小时前
Uber 如何完成超大规模 JUnit 迁移:从 JUnit 4 到 JUnit 5 的自动化工程实践
后端
CodeSheep1 小时前
南京IT公司六小龙
前端·后端·程序员
IT_陈寒2 小时前
React useEffect依赖数组把我坑惨了,这次搞明白了
前端·人工智能·后端
环境栈笔记2 小时前
AI 浏览器任务失败怎么排查:Context、Session、Page State 和 Task Log 检查清单
前端·人工智能·后端·自动化
阳光是sunny2 小时前
别再让 AI 瞎找代码了!CodeGraph 这工具能让它秒懂你的项目
前端·后端·ai编程
吾诺2 小时前
2026高温工况双叠自锁垫圈怎么选
后端
xixingzhe22 小时前
Spring 依赖注入
java·后端·spring