# 工作区同步

把手机上的工作区目录同步到远程服务器。入口在「设置 → 运行环境 → 连接与同步」，页面底部有四个标签页。

::: tip 本页与「容器与镜像」的分工
本页只负责**连接通道和文件同步**。如果你想让 AI 直接把远程服务器当执行环境（命令、文件、终端都在服务器上运行），那是另一项功能，见[远程 SSH 模式](https://aicode.murk.top/md/guide/remote-ssh.md)——它会复用这里建好的 SFTP 通道。
:::

## 连接配置

点右上角 + 新建一个连接通道：

- **协议类型**：`SFTP`（默认端口 22）或 `FTP`（默认端口 21）。
- **连接名称**：别名。
- **主机地址**：IP 或域名。
- **端口 / 用户名 / 认证方式**：必填。认证方式可以选择**密码**，或选择**密钥**（从「SSH 密钥」页已添加的私钥中选择；加密私钥的口令在密钥编辑页里填，连接这里不再重复填）。
- **测试连通性**：保存前可先测试。

**排序**：长按通道行的名称区域上下拖动可调整顺序（重启后保持）。该顺序有实际影响——新建挂载时的「关联连接通道」下拉、编辑容器时的「SSH 通道」下拉，默认选中的都是列表第一项。

### SSH 密钥与主机指纹

点顶栏的钥匙图标进入，底部两个标签页：

**密钥**：管理登录用的私钥。点右上角 + 有两种添加方式：**从文件导入**（从文件选择器选私钥文件）或**粘贴密钥**（进入与编辑页相同的表单，粘贴私钥内容并填名称、口令，名称留空自动命名）。私钥会加密复制到私有目录并解析出公钥指纹，加密的私钥会标注「需口令」。点某条密钥进入编辑页：可改名称和口令（加密私钥的 passphrase），私钥内容只读（默认隐藏，点右侧眼睛可查看）。口令在密钥上设置，连接选用该密钥时会自动带上。左滑删除。

密钥列表会在进入页面后异步加载；导入、修改或删除后自动刷新。保存带口令的密钥时无需停留等待，返回列表后即可查看更新结果。

**指纹**：管理已信任的服务器主机指纹。首次连接某台服务器时会弹窗显示密钥类型和 `SHA256:` 指纹，确认「信任并连接」后保存下来，之后直接放行。如果服务器指纹变了会再次要求确认——这是防中间人攻击的机制，指纹突然变化要当心。左滑删除后下次连接重新确认。

## 挂载目录

连接通道只解决「能否连接」，还需要建立「哪个本地工作区对应哪个远程目录」的映射。点右上角 + ：

- **关联连接通道**：下拉选一个已建好的连接。
- **远程目标目录**：右侧文件夹图标可以打开远程目录浏览器逐级点选。
- **映射到本地工作区**：下拉选一个本地工作区（需要先在侧边栏创建）。
- **应用启动时自动连接**：打开后会跟随当前工作区——App 启动或切换工作区时，自动连接映射到当前工作区的挂载并监听本地改动，同时断开其它工作区的挂载。连接失败会按退避间隔重试；切换到其它工作区或手动断开时会停止该挂载的重试，尚未完成的旧连接也不会启用同步。

保存时如果已存在相同的「通道 + 远程目录 + 工作区」组合，会提示挂载已存在并拦截。

连接成功后卡片上有几个操作：断开连接、上传变更、下载全部，以及右侧「更多」菜单（强制全量上传、清除同步记录）。列表行左滑可删除。

::: danger 同步是单向的
自动同步只把**连接后的本地改动推到远程**（监听本地文件的增删改），远程目录的变化**不会**自动拉下来。连接时不会自动上传已有文件，需要时请手动点「上传变更」。

需要把远程文件拉到本地时手动点「下载全部」，但要注意这是**全量覆盖式**拉取：会覆盖本地同名文件（不删除本地多出来的文件），本地未保存的修改可能被覆盖。使用前请确认清楚。
:::

### 哪些文件会被上传

「上传变更」与自动同步都**只传输有改动的文件**：每个文件按「大小 + 修改时间」和上次成功同步的记录比对，一致就跳过、不再重传；大小相同但修改时间不同时，再用内容哈希（SHA-256）兜底判断，内容确实没变也会跳过。这些同步记录保存在 App 私有目录，重启后依然有效。

判断是保守的：拿不准就上传，不会漏传。右侧「更多」菜单里：

- **强制全量上传**：忽略同步记录，把全部文件重传一遍。用于远程目录被外部清空或改动、需要强制覆盖的场景。
- **清除同步记录**：删除该挂载的同步记录，让下次上传重新视为全新（等价于一次全量）。

另外，对确实改动过的文件，SFTP/FTP 只能整体重传，无法只传输差异部分。

连接超时是 15 秒，主机不可达时会快速报错而不是一直等。已连接的挂载每 15 秒探活一次，断线时卡片显示「重连中」，并按 5 秒、10 秒、20 秒、40 秒、60 秒的间隔自动重连，成功后恢复同步。

## 内置 FTP 服务端

在手机上开启一个 FTP 服务，便于用电脑管理手机上的项目。

手机和电脑要连同一个 WiFi。开启后界面会显示 FTP 地址（如 `ftp://192.168.1.100:2121`，点地址可复制），在电脑的文件资源管理器或 FileZilla 里访问即可，能管理 `projects/` 下的全部项目。

可配置的参数有监听端口、登录用户名、登录密码、是否允许匿名访问、是否开机自启，改完点底部「保存配置」。服务运行时保存会重启服务并断开现有连接，之后只有当前配置的账号可以登录；关闭匿名访问后，匿名登录也会失效。`anonymous` 是匿名登录的保留名称，请为普通账号使用其它用户名。

::: warning 注意安全
允许匿名访问意味着同一网络下的任何设备都能读写你的项目文件。在公共 WiFi 下请勿开启匿名访问，使用完毕后建议关闭服务。
:::

## 同步设置

- **遵循 .gitignore 规则**：打开后自动读取项目根目录的 `.gitignore` 过滤要同步的文件。
- **单次最大同步队列数量**：防止一次性改动大量文件时导致服务端请求过载或网络拥塞，超出的操作会排队分批执行。

另外同步引擎始终会忽略常见的构建和缓存目录（`node_modules`、`.git`、`build`、`dist` 等），无需手动配置。

改完点底部「保存设置」生效。
