4.2 KiB
name, description
| name | description |
|---|---|
| sync-air-cargo | 将 aerologic-app 项目中未提交的变更(已修改、新增、已删除、包括未跟踪的文件)以文件级 cp/rm 方式同步到同级目录下的 air-cargo 项目——两者是同一份源码的两个独立 git 仓库副本,分别推送到不同的远程地址。只做文件复制/删除,不对内容做任何二次编辑或转换。每当用户提到"同步到 air-cargo"、"同步到另一个仓库/项目"、"推送/复制到 cargo 项目"、"两个项目要保持一致",或者在 aerologic-app 里改完代码后问要不要同步/推送到另一个仓库时,应主动使用此 skill,而不是手动逐个 cp 文件。 |
同步变更到 air-cargo
背景
aerologic-app 和同级目录下的 air-cargo 是同一份项目源码的两个独立 git 仓库副本,目录结构完全一致,分别推送到不同的远程仓库地址。日常开发只在 aerologic-app 中进行,完成后需要把未提交的变更原样同步一份到 air-cargo,再由用户在 air-cargo 里自行提交、推送。
同步的判定完全基于 git status:在 aerologic-app 里,工作区中存在的文件(无论是修改、新增还是未跟踪)就复制覆盖到 air-cargo 对应路径;工作区中已不存在的文件(即被删除的)就在 air-cargo 里删除对应路径。这样天然覆盖了修改/新增/删除/未跟踪/重命名(重命名会被当作"删除旧路径 + 新增新路径"处理)等所有情况,不需要逐个状态码去分支判断。
只同步工程项目本身的文件:CLAUDE.md 以及 .claude/ 目录(包括其下的 skills/、commands/、settings.local.json、mcp.json 等)属于 Claude Code 的工具配置/记忆,两个仓库各自独立维护,不属于"项目源码",因此始终排除在同步范围之外,不会被复制也不会被删除。脚本会在输出里单独列出"已忽略,不参与同步"的清单,方便核对。
使用方法
脚本位于 scripts/sync.sh,用法:
bash scripts/sync.sh [SOURCE_DIR] [TARGET_DIR] [preview|apply]
SOURCE_DIR默认为当前目录(一般就是 aerologic-app 项目根目录)TARGET_DIR默认为SOURCE_DIR同级的air-cargo目录,一般不需要手动指定- 第三个参数默认
preview(只打印清单,不做任何改动),传apply才会真正执行复制/删除
步骤
-
先预览,让用户看到将要发生什么:
bash /Users/kid/Development/Fusion/Projects/aerologic-app/.claude/skills/sync-air-cargo/scripts/sync.sh输出会分别列出"待复制/覆盖"和"待删除"的文件清单。
-
用
AskUserQuestion工具向用户确认,不要只是在文字里问一句让用户打字回复。这是一个会覆盖air-cargo中已有文件、且删除操作不可逆的操作,必须先把预览清单(待复制、待删除的文件数量和列表)放进问题描述里,让用户能一眼看到影响范围,选项至少包含"确认同步"和"取消"。得到确认后才能继续执行apply(这遵循整体规则:覆盖性/破坏性操作需要用户确认,不要因为 skill 本身能直接跑就跳过确认)。 -
用户确认后执行同步:
bash /Users/kid/Development/Fusion/Projects/aerologic-app/.claude/skills/sync-air-cargo/scripts/sync.sh . /Users/kid/Development/Fusion/Projects/air-cargo apply执行完会输出"复制/更新 N 个文件,删除 M 个文件"的汇总。
-
同步之后不要自动 commit/push。脚本只做文件复制,
air-cargo那边的git add/commit/push由用户自行决定和操作——两个仓库指向不同的远程地址,提交推送这类会影响远程共享状态的操作应始终由用户主导确认。
注意事项
- 脚本只识别 git 能感知到的变更(
git status看得到的),.gitignore忽略的文件(如构建产物build/、.gradle/)不会被同步,这也是符合预期的——不应该把本地构建缓存同步过去。 - 如果
air-cargo里对应路径本身也有未提交的本地修改,会被直接覆盖覆盖掉,预览阶段要留意这一点并提醒用户。