Syncthing 实战:局域网同步仓库
学习目标
- 掌握两台设备间通过 Syncthing 配对的方法。
- 掌握文件夹共享配置(双向同步)。
- 掌握同步状态监控与冲突处理。
- 理解版本控制配置与冲突副本恢复。
- 了解 Git + Syncthing 互补使用的策略。
前置条件
- 已完成 00_syncthing安装与概念 的学习,至少一台设备已完成安装与文件夹添加。
- 准备两台(或以上)设备,均安装并启动 Syncthing。
- 所有设备处于同一局域网内(连接到同一个路由器/交换机)。
- 可选:在防火墙中允许 Syncthing 通过专用网络。
项目概述
在本实战项目中,你将完成以下任务:
- 将两台设备通过 Syncthing 配对,建立信任关系。
- 将本教程仓库文件夹配置为双向同步,实现多设备实时同步。
- 监控同步状态,处理可能出现的冲突。
- 配置文件版本控制,保障数据安全。
🎯 最终效果:在工作电脑和笔记本上分别编辑 Obsidian 笔记,Syncthing 自动将改动同步到另一台设备,无需手动拷贝或推送。
步骤
第 1 步:确认两台设备的 Syncthing 状态
在每台设备上:
- 打开
http://127.0.0.1:8384进入 Web UI。 - 确认状态显示为 已就绪(绿色对勾)。
- 确认防火墙没有阻止 Syncthing 通信:
- Windows:检查 Windows Defender 防火墙 → 允许应用 → 确保 Syncthing 和 SyncTrayzor 在专用网络中已允许。
- macOS:系统设置 → 网络 → 防火墙 → 允许 Syncthing。
- Linux:检查
ufw status,确保端口22000/tcp和21027/udp已放行(局域网内通常不需额外配置)。 - Android:Android 系统通常不会阻止 Syncthing 局域网通信,但需确保省电模式未限制 Syncthing 后台运行(设置 → 应用 → Syncthing-Fork → 电池 → 选择 无限制)。
第 2 步:交换设备 ID 实现配对
Syncthing 的设备配对需要交换设备 ID,形成信任关系。
方法 A:通过设备 ID 文本添加(推荐)
在设备 A(如工作电脑)上:
- 点击 Web UI 底部的 添加远程设备 按钮。
- 在 设备 ID 字段中,粘贴设备 B 的设备 ID。
如何获取设备 ID?在设备 B 的 Web UI 上点击 此设备 → 显示设备 ID,复制完整 ID。
- 在 设备名称 字段中,输入设备 B 的识别名称(如 “笔记本”)。
- 点击 保存。
在设备 B(如笔记本)上:
- 此时设备 B 的 Web UI 会弹出一个配对请求通知(右上角铃铛图标会有红点)。
- 点击通知 → 查看请求来源(应显示设备 A 的设备 ID 和名称)。
- 确认无误后,点击 添加设备。
快速确认设备身份
在点击 “添加设备” 之前,建议面对面核对设备 ID 的前几位和后几位字符,或在已信任的聊天工具中交换 ID 截图。
方法 B:通过二维码添加(适用于手机/平板)
- 在设备 A 的 添加远程设备 弹窗中,点击设备 ID 输入框右侧的二维码图标。
- 设备 B(如果是手机/平板)打开 Syncthing 应用 → 添加设备 → 扫描二维码。
- 确认后完成配对。
第 3 步:共享文件夹
设备配对后,还需要指定哪些文件夹参与同步。
在设备 A 上共享文件夹:
- 在 Web UI 的 文件夹 区域,找到已添加的仓库文件夹(如 “Obsidian 教程”)。
- 点击该文件夹右侧的 编辑(齿轮图标)。
- 在 共享 标签页中,勾选刚才添加的设备 B。
- 点击 保存。
在设备 B 上接收文件夹:
- 设备 B 将收到一个文件夹共享请求通知。
- 点击通知,查看请求详情。
- 选择文件夹的本地路径:
- 如果设备 B 上已有同路径的文件夹(如从 Git 克隆的同一仓库),选择 与现有文件夹合并。
- 如果是全新设备,可以指定一个位置(如
D:\WorkSpace\obsidian_tutorial),Syncthing 会自动创建。
- 点击 接受。
路径一致性建议
虽然 Syncthing 不要求不同设备的文件夹路径相同,但为了减少混淆,建议在所有设备上使用相同的路径存放 Obsidian 仓库(例如都在
D:\WorkSpace\obsidian_tutorial)。
第 4 步:验证同步
检查同步状态
- 在任一台设备的 Web UI 上,稍等片刻(通常几秒内)。
- 观察文件夹状态变化:
- 未同步(黄色):正在同步中,有文件需要传输。
- 最新(绿色):所有文件已同步完成。
- 错误(红色):存在冲突或权限问题。
测试同步
测试流程:
- 在设备 A 上修改任意一个笔记文件(例如在
README.md末尾加一行注释)。 - 保存文件。
- 观察设备 A 的 Web UI:文件夹状态变为 未同步,同步进度条显示传输进度。
- 几秒后状态变为 最新。
- 切换到设备 B,打开同一文件确认改动已同步。
⚡ 默认情况下,Syncthing 会在文件保存后数秒内触发同步。如果网络通畅,整个过程通常在 10 秒以内。
第 5 步:配置文件版本控制
版本控制可以在文件被误修改或删除时提供恢复能力。
在每台设备上分别配置:
- 点击文件夹右侧的 编辑(齿轮图标)。
- 进入 高级 标签页。
- 文件版本控制 下拉菜单选择 简单版本控制。
- 保留版本数 设为
5(保留最近 5 个被替换或删除的版本)。 - 点击 保存。
版本控制策略简介
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 垃圾桶 | 被替换的文件送到系统回收站 | 最小化存储占用 |
| 简单版本控制 | 保留最近 N 个版本的文件副本 | 大多数日常使用 |
| 阶段性版本控制 | 按时间间隔保留版本(如每小时 / 每日 / 每周) | 需要长时间回溯的场景 |
| 外部文件版本控制 | 自定义脚本处理同步冲突 | 高级用户 / 与其他工具集成 |
恢复旧版本文件
使用简单版本控制时,旧版本文件会保存在与同步文件夹同级的 .stversions 目录中。例如:
obsidian_tutorial/
└── .stversions/
├── README.md~20260703-120000.sync-conflict
└── section7/
└── 00_syncthing安装与概念.md~20260703-121500.sync-conflict
要恢复某个文件的旧版本:
- 进入
.stversions目录。 - 找到对应的文件名和时间戳。
- 将文件复制回原位置覆盖当前版本(或手动合并)。
第 6 步:处理文件冲突
当同一文件在两个设备上同时被修改时,Syncthing 无法自动判断哪个版本为最终版本,此时会产生冲突副本。
冲突副本文件名格式
原文件名.md.sync-conflict-20260703-123000-DESKTOP-ABC123
其中:
.sync-conflict-:冲突标记20260703-123000:冲突发生的时间(UTC)DESKTOP-ABC123:产生冲突的设备名称
解决冲突的推荐工作流
方法一:手动合并(推荐)
- 在任意一台设备上打开原始文件和冲突副本。
- 逐段比较差异,手动合并为一个最终版本。
- 删除冲突副本文件(
.sync-conflict-*)。 - 保存最终版本,变更将同步到另一台设备。
方法二:使用 VS Code 比较
- 在 VS Code 中打开仓库文件夹。
- 在文件资源管理器中选中原始文件。
- 右键 → 选择以进行比较。
- 再选中冲突副本文件,右键 → 与已选文件比较。
- 使用 VS Code 的差异编辑器逐行对比,手动合并。
- 合并完成后删除冲突副本。
避免冲突的习惯
- 编辑文件前,确认 Syncthing 状态为 最新(绿色)。
- 在不同设备上错开编辑时间,避免同时修改同一文件。
- 如果需要在多设备上频繁编辑同一笔记,考虑采用 先拉后改 的策略——先等待同步完成,再开始编辑。
第 7 步:进阶配置(可选)
仅发送 / 仅接收模式
如果希望在某些设备上只读同步(如媒体服务器),可以修改文件夹类型:
- 编辑文件夹 → 高级 标签页。
- 文件夹类型 下拉菜单:
- 仅发送:本地修改会同步到远端,但远端修改不会同步回来。适用于备份场景。
- 仅接收:接收远端的修改,本地修改不会同步出去。适用于只读展示设备。
- 发送和接收(默认):双向同步。
引入速率限制
如果同步过程占用过多带宽,可以在设置中限制:
- 设置 → 连接。
- 在 速率限制 中设置最大上传/下载速度(如
10MB/s)。 - 点击 保存。
忽略不需要同步的文件
Syncthing 支持 .stignore 文件,类似于 Git 的 .gitignore。可以在同步文件夹根目录创建 .stignore 文件:
# 忽略 node_modules
node_modules/
# 忽略系统文件
.DS_Store
Thumbs.db
# 忽略 Obsidian 工作区缓存
.obsidian/workspace.json
.obsidian/workspace
注意:
.stignore文件的修改需要确保所有设备都同步此文件,或分别在每台设备上手动创建。
常见问题
Q:配对成功后文件夹状态一直是 “未同步”?
可能的原因:
- 两设备网络不通(尝试在设备 A 上
ping设备 B 的 IP)。 - 防火墙阻止了 Syncthing 端口(
22000/tcp)。 - 文件夹 ID 不匹配(检查两台设备上文件夹 ID 是否完全一致)。
Q:同步速度很慢?
- 确认设备处于同一局域网,直连速度最快。
- 检查设置中是否启用了中继(局域网内应关闭中继以启用直连)。
- 确认没有启用速率限制。
- 如果有大量小文件需要同步,初始同步会慢一些,耐心等待即可。
Q:如何确认两台设备是直连还是通过中继?
- 在 Web UI 右侧远程设备区域,点击已连接的设备。
- 查看 地址 列:如果显示
tcp://192.168.x.x:22000,说明是直连;如果显示relay://,说明通过中继。
Q:Git 仓库能用 Syncthing 同步吗?
可以,但需要注意:
- Syncthing 同步和 Git 版本控制是互补的,不是替代关系。
- Git 仓库中的
.git文件夹会被同步——这通常没问题,但如果两台设备同时执行 Git 操作(如git commit),可能导致.git目录冲突。 - 推荐策略:日常编辑用 Syncthing 实时同步,在正式提交到 GitHub 时选择一台设备执行
git add / commit / push操作,避免多设备同时操作 Git。
练习任务
- 在两台设备上完成 Syncthing 配对。
- 共享本教程仓库文件夹,验证同步正常。
- 在设备 A 上创建一个新的测试文件
test-sync.md,确认设备 B 上能自动收到。 - 在设备 A 和 B 上先后修改同一文件的不同位置,确认同步正常(不产生冲突)。
- (选做)模拟冲突:在两台设备上同时修改同一文件的同一位置,观察冲突副本生成,并手动合并解决。
验收清单
- 两台设备已完成配对,远程设备列表中显示对方且状态为 “已连接”。
- 文件夹已共享,同步状态显示为 最新(绿色)。
- 文件夹修改可在另一台设备上自动同步(10 秒内)。
- 已配置文件版本控制(简单版本控制,保留 5 个版本)。
- 了解冲突副本的识别与解决方法。
- 了解 Git + Syncthing 的互补使用策略。