同步冲突处理——双向同步中的数据保护策略
冲突是怎么产生的
在双向同步(Synchronize)模式下,GoodSync 的理想状态是两边各自修改不同的文件。但实际使用中,经常出现两边在各自的时间点上修改了同一个文件的情况:
时间线:
T1: 两侧同时有文件 config.ini(版本 v1)
T2: 左侧用户 A 修改 config.ini → v2
T3: 右侧用户 B 修改 config.ini → v3
T4: GoodSync 同步,发现两侧都修改过 → 产生冲突
GoodSync 无法自动判断 v2 和 v3 哪个是「正确版本」,必须按照预设策略来处理。
内置冲突解决策略
在作业 Options → General → Conflict Resolution 中选择默认策略:
| 策略 | 行为 | 优点 | 缺点 |
|---|---|---|---|
| 保留最新 | 比较两侧文件的修改时间,保留时间较新的那个 | 自动处理,最简单 | 依赖时间戳可靠性;跨时区或设备时钟不准时可能出错 |
| 保留左侧 | 始终以左侧为准,右侧被覆盖 | 确定性强 | 右侧的修改会丢失 |
| 保留右侧 | 始终以右侧为准,左侧被覆盖 | 确定性强 | 左侧的修改会丢失 |
| 手动选择 | 每次遇到冲突都暂停,弹窗让用户选 | 最安全,不会丢失数据 | 无法自动运行,每次同步需要人工介入 |
| 自动保留双方 | 保留两侧文件,把一方重命名为带「Conflict」标记的副本 | 最安全,零数据丢失 | 会产生额外文件,需要后续清理 |
推荐策略:自动保留双方。这是唯一完全不丢数据的自动化策略,适合无人值守运行。后续定期清理带「Conflict」标记的文件即可。
手动选择的细节
如果选择手动策略,遇到冲突时会弹出对话框:
- 显示两侧文件的路径、大小、修改时间
- 提供「用左侧覆盖右侧」「用右侧覆盖左侧」「保留双方」三个选项
- 可以勾选「对所有剩余冲突应用此选择」一次性处理全部冲突
手动策略适合同步量小、但文件重要性高的场景——每次冲突都值得停下来人工判断。
为什么「保留最新」并不总是可靠
「保留最新」策略看起来最智能,但在实际中经常出问题:
- 跨时区设备:左侧在 UTC+8(北京时间),右侧在 UTC-5(美东时间),同一个文件在不同时区下的时间戳可能产生误导
- 网络延迟:文件在网络传输过程中时间戳被改变(某些网络文件系统在复制时会刷新时间戳)
- 修改时间被刻意设置:某些工具会把文件的修改时间设置到特定值,绕过时间判断
如果选择「保留最新」,建议同时开启MD5 校验作为补充——GoodSync 可以在时间戳判断之外,额外对比两侧文件的 MD5 哈希确认是否真的相同。
冲突文件的清理
选择「自动保留双方」后,文件会被重命名。GoodSync 的命名格式为:
# 假设原始文件名:config.ini
# 冲突时,被覆盖的一方会被重命名为:
config.ini Conflict 2026-10-13 14-30-22.ini
定期检查目标目录中带「Conflict」标记的文件,确认内容后手动删除不需要的版本即可。这也是为什么版本历史功能建议同时开启——它提供了另一层数据保护。
避免冲突的策略
比起冲突发生后解决,更好的做法是在源头上减少冲突:
- 按功能拆分目录:不要把所有东西都放在一个文件夹里,按功能或用户分目录(如
UserA-Docs/、UserB-Docs/),各自同步各自的目录 - 合理划分同步范围:双向同步只用于真正需要两边都修改的场景;如果只有一边会修改,用单向备份更安全
- 大文件锁策略:对于会被长时间打开的大文件(如 Excel 工作簿),GoodSync 的「Copy Locked Files」功能可以处理打开中的文件,但仍建议在业务上约定谁负责修改
- 增加同步频率:更频繁的同步(如每分钟一次)会减少冲突产生的概率——两侧的变更窗口变小
冲突日志
GoodSync 会把所有冲突事件记录到日志文件中:
- 位置:作业的日志面板(主界面下方的 Log 标签)
- 包含:时间、文件路径、两侧版本的时间戳和大小、最终解决策略
- 可以用来回顾和审计同步过程
建议在重要数据的同步作业中定期查看日志,确认没有意外的冲突处理结果。