Files
aerologic-app/.claude/skills/sync-air-cargo/SKILL.md

4.2 KiB
Raw Blame History

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.jsonmcp.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 才会真正执行复制/删除

步骤

  1. 先预览,让用户看到将要发生什么:

    bash /Users/kid/Development/Fusion/Projects/aerologic-app/.claude/skills/sync-air-cargo/scripts/sync.sh
    

    输出会分别列出"待复制/覆盖"和"待删除"的文件清单。

  2. AskUserQuestion 工具向用户确认,不要只是在文字里问一句让用户打字回复。这是一个会覆盖 air-cargo 中已有文件、且删除操作不可逆的操作,必须先把预览清单(待复制、待删除的文件数量和列表)放进问题描述里,让用户能一眼看到影响范围,选项至少包含"确认同步"和"取消"。得到确认后才能继续执行 apply(这遵循整体规则:覆盖性/破坏性操作需要用户确认,不要因为 skill 本身能直接跑就跳过确认)。

  3. 用户确认后执行同步

    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 个文件"的汇总。

  4. 同步之后不要自动 commit/push。脚本只做文件复制,air-cargo 那边的 git add / commit / push 由用户自行决定和操作——两个仓库指向不同的远程地址,提交推送这类会影响远程共享状态的操作应始终由用户主导确认。

注意事项

  • 脚本只识别 git 能感知到的变更(git status 看得到的),.gitignore 忽略的文件(如构建产物 build/.gradle/)不会被同步,这也是符合预期的——不应该把本地构建缓存同步过去。
  • 如果 air-cargo 里对应路径本身也有未提交的本地修改,会被直接覆盖覆盖掉,预览阶段要留意这一点并提醒用户。