Files
ProjectAGiPrompt/35-黑苹果DELL/4-windows协同MacOS/3-260625-同步方案.md
2026-07-01 10:44:16 +08:00

7.6 KiB
Raw Blame History

以下是基于你的 Windows (主力开发) + macOS (Agent 执行中枢) 架构的完整 Mutagen 双端配置方案。


整体架构说明

核心思路是macOS 作为永不停机的 Agent 执行节点Windows 上的 IDEA/Antigravity 负责人工编辑Mutagen 在两端之间保持代码实时双向同步。 .git 目录仅保留在 macOS 侧Agent 提交端Windows 侧只同步 working tree。

Windows (IDEA/Antigravity 编辑)
        ↕  Mutagen SSH 双向同步 (two-way-resolved)
macOS (Codex / ClaudeCode Agent 执行中枢,永不停机)

安装 Mutagen

macOS 端:

brew install mutagen-io/mutagen/mutagen
# 注册为登录项,实现永不停机自启
mutagen daemon register
mutagen daemon start

Windows 端PowerShell推荐 Scoop

scoop bucket add mutagen https://github.com/mutagen-io/mutagen-scoop
scoop install mutagen
# 注册为 Windows 登录自启动
mutagen daemon register
mutagen daemon start

Mutagen daemon 支持通过 mutagen daemon register 命令在 macOSlaunchd和 Windows登录启动项上注册系统级自动启动 ,无需手动编写 plist 或注册表。 mutagen


SSH 互信配置

Mutagen 通过 SSH 建立连接Windows 侧作为发起端clientmacOS 侧作为服务端。

macOS 端开启 SSH

# 系统偏好设置 → 共享 → 远程登录 开启
# 或命令行
sudo systemsetup -setremotelogin on
# 确认监听
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Windows 端配置 SSH 密钥免密登录:

# 生成密钥(若已有可跳过)
ssh-keygen -t ed25519 -C "mutagen-win-to-mac"

# 将公钥追加到 macOS 的 authorized_keys
# 在 Windows PowerShell 中:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh robert@<MAC_IP> "cat >> ~/.ssh/authorized_keys"

验证免密连通性:

ssh robert@<MAC_IP> "echo ok"

全局配置文件(两端均建议配置)

macOSWindows~/.mutagen.ymlWindows 为 %USERPROFILE%\.mutagen.yml)中写入:

sync:
  defaults:
    mode: two-way-resolved
    maxEntryCount: 1000000
    scanMode: accelerated
    watch:
      mode: portable          # ✅ 正确:嵌套在 watch 下
    ignore:
      vcs: true
      paths:
        - ".idea/**"
        - "*.class"
        - "*.pyc"
        - "__pycache__/**"
        - "node_modules/**"
        - ".venv/**"
        - "venv/**"
        - "dist/**"
        - "build/**"
        - "*.log"
        - ".DS_Store"
        - "Thumbs.db"
    symlink:
      mode: portable
    permissions:
      defaultFileMode: 0644
      defaultDirectoryMode: 0755

two-way-resolved 模式在冲突时以修改时间较新的一方为准适合人工编辑Windows与 Agent 自动生成macOS并行的场景 。--ignore-vcs 保证 .git 目录只留在 macOS Agent 端Windows 只是纯 working tree 。 github


创建同步会话

Windows PowerShell 中执行(由 Windows 侧发起 Session

# 主项目同步
mutagen sync create `
  --name="RMDC-CLOUD-SYNC" `
  --mode=two-way-resolved `
  --ignore-vcs `
  --ignore=".idea/**" `
  --ignore="*.class" `
  --ignore="__pycache__/**" `
  --ignore="node_modules/**" `
  --ignore=".venv/**" `
  --ignore="*.log" `
  --symlink-mode=portable `
  "C:\Users\wdd\Documents\IdeaProjects\RMDC-CLOUD" `
  "wdd@192.168.1.30:/Users/wdd/Documents/IdeaProjects/RMDC-CLOUD"

如果有多个项目,可以为每个项目单独创建 session--name 区分:

mutagen sync create `
  --name="AGI-PROMPT-SYNC" `
  --mode=two-way-resolved `
  --ignore-vcs `
  --ignore=".idea/**" `
  --ignore="*.class" `
  --ignore="__pycache__/**" `
  --ignore="node_modules/**" `
  --ignore=".venv/**" `
  --ignore="*.log" `
  --symlink-mode=portable `
  "C:\Users\wdd\Documents\IdeaProjects\ProjectAGiPrompt" `
  "wdd@192.168.1.30:/Users/wdd/Documents/IdeaProjects/ProjectAGiPrompt"

使用 Mutagen Project 编排多项目(推荐)

在项目根目录创建 mutagen.yml,方便一键启停所有 session

# Windows 项目根目录下的 mutagen.yml
sync:
  backend:
    alpha: "."
    beta: "robert@<MAC_IP>:~/Projects/myproject"
    mode: "two-way-resolved"
    ignore:
      vcs: true
      paths:
        - ".idea/**"
        - "__pycache__/**"
        - "node_modules/**"
        - ".venv/**"
        - "*.log"
        - "dist/**"
        - "build/**"
    symlink:
      mode: "portable"
    watch:
      mode: "portable"

使用方式:

cd C:\Users\Robert\Projects\myproject
mutagen project start   # 启动所有 session
mutagen project list    # 查看状态
mutagen project flush   # 强制立即同步一次
mutagen project pause   # 暂停
mutagen project terminate # 终止

macOS 永不停机配置

除了 mutagen daemon register 之外,还需要防止 macOS 休眠中断同步:

# 禁止 macOS 休眠(适合作为 Agent 服务器)
sudo pmset -a sleep 0
sudo pmset -a disksleep 0
sudo pmset -a displaysleep 30   # 屏幕可以睡,系统不睡
sudo pmset -a powernap 1        # 开启 Power Nap 保持网络

确认当前电源策略:

pmset -g

关键使用注意事项

⚠️ 冲突处理规则

two-way-resolved 会以修改时间较新的文件覆盖较旧的Agent 批量生成文件时速度很快,如果你在 Windows 同时手动编辑同一文件,存在覆盖风险。建议:

  • Agent 执行期间,避免在 Windows 上同时修改 Agent 正在处理的文件
  • 利用 mutagen sync pause --name=agent-project-sync 在需要时临时暂停

⚠️ .git 目录仅留 macOS 侧

由于配置了 --ignore-vcsWindows 侧没有 .git不能在 Windows 侧执行 git 操作,所有 commit / branch 操作需要在 macOS 上进行(或通过 SSH 远程到 macOS 执行)。 mutagen

⚠️ 大文件 / 二进制文件

模型权重、数据集等大文件不应纳入同步范围,在 ignore 中明确排除:

- "models/**"
- "*.bin"
- "*.safetensors"
- "*.gguf"
- "data/**"

⚠️ 网络中断恢复

Mutagen 会自动重连SSH 断线后 daemon 保持 session 状态,重新连接后会自动 reconcile。可以通过以下命令检查 session 健康状态:

mutagen sync list          # 查看所有 session 状态
mutagen sync monitor agent-project-sync  # 实时监控某个 session

⚠️ Windows 路径与权限

Windows 侧文件默认没有 POSIX 权限概念Mutagen 会使用 --default-file-mode--default-directory-mode 来为同步到 macOS 的文件设置权限:

mutagen sync create `
  --default-file-mode=0644 `
  --default-directory-mode=0755 `
  ...

日常操作速查

操作 命令Windows PowerShell
查看所有 session mutagen sync list
实时监控同步状态 mutagen sync monitor <name>
强制立即同步 mutagen sync flush <name>
暂停同步 mutagen sync pause <name>
恢复同步 mutagen sync resume <name>
重置冲突 mutagen sync reset <name>
停止并删除 session mutagen sync terminate <name>
守护进程状态 mutagen daemon stop && mutagen daemon start

Mutagen daemon 升级后需要重启:先 mutagen daemon stopmutagen daemon start,直接升级不重启会有 API 版本不匹配警告 。 mutagen