2026/8/23 15:16:39

StackEdit协作同步:从共享第一个文件到处理冲突的完整指南

StackEdit协作同步:从共享第一个文件到处理冲突的完整指南 StackEdit协作同步从共享第一个文件到处理冲突的完整指南【免费下载链接】stackeditIn-browser Markdown editor项目地址: https://gitcode.com/gh_mirrors/st/stackedit周三晚上同事在浏览器里改了一份产品文档你在另一台笔记本上补了个表格第二天打开文件却发现两边内容各说各话。StackEdit 的协作同步Sync功能就是为这种场景准备的它把你的 Markdown 文档在浏览器本地与 GitHub、GitLab、Google Drive 之间自动同步双方都改过同一份内容时做三方合并three-way merge并保留可回看的修订历史。这篇文章带你从第一次建同步位置到处理冲突、回看历史版本把整套流程走一遍。它是怎么跑起来的一个哈希加三本小账给每个版本发一张图书馆借书卡编号先说最核心的一层每次内容发生变化StackEdit 都会给整份内容算一个哈希hash你可以把它理解成图书馆借书卡上的编号——不用翻开书看内容只要编号一致就知道是同一本。同步时两边先比编号编号相同就什么都不做编号不同才下载、比对、合并。这就是增量同步incremental sync的全部动机——把传整份文档变成传差异。为什么是三个编号不是一个每个同步位置sync location在本地记录三个版本号源码里就是三个常量// src/services/syncSvc.js 中每个同步位置记的三本小账 const LAST_SEEN 0; // 上次看到远端的版本编号 const LAST_MERGED 1; // 上次和远端合并过的版本编号共同基准 const LAST_SENT 2; // 上次上传到远端的版本编号三个编号各管一段LAST_SEEN回答我最后见过远端是什么样LAST_MERGED回答我和远端最后一次在哪个版本上达成过一致LAST_SENT回答我最后传上去的是什么。有这三本账同步时才能判断远端的改动是我上传的、是别人新改的、还是早就不需要管了的。跟着做一次从建同步位置到解决冲突第一次共享文档3步建立同步位置打开 StackEdit在左侧边栏点击「同步」面板先绑定一个账号「Add GitHub account」「Add Google Drive account」等入口都在这里。决定同步范围整个工作区workspace可以挂到 GitHub 仓库目录、GitLab 项目目录或 Google Drive单个文件则可以存到 Dropbox、Gist 等处。填仓库地址和文件夹路径如不填默认根目录授权后即可在远端看到这份文档。之后系统按固定间隔自动同步任何时候按 CtrlSMac 上是 CmdS都能手动触发一次「Synchronize now」。⚠️ 容易踩的坑放在临时目录temp下的文件不参与同步左侧面板会提示 cant be synced——先把它移动进正式工作区再说。两个人同时改了同一段落三方合并你先别慌同步是先下载远端、再决定是否上传不会盲目覆盖。如果远端没变过本地内容原样上传只有本地改过也直接上传。双方都改过时系统取最后一次合并过的版本作为共同基准做三方合并各自改动的章节都保留。连同一个段落都动了的情况合并交给 diff-match-patch 这类词级差异算法处理结果自动生成没有保留我的/采用他的选择框。合并完看一眼结果不满意就打开历史面板找旧版本对照。容易踩的坑两个人在同一句里插入不同内容时自动合并结果偶尔会拗口。别把自动合并当保证交出去之前人工过一遍。出错了别删打开历史看差异左侧边栏点击时钟图标打开历史history面板。修订列表来自同步提供方例如 Google Drive 的版本历史按作者和时间排列。点任意一个修订编辑器会把该版本与当前内容做差异高亮新增部分标亮、被删部分带删除线。按 Esc 退出修订视图回到当前内容。容易踩的坑历史面板展示的是提供方的修订记录StackEdit 自身只负责把最近 20 个版本编号带在上传内容里供合并参考长周期留档要靠提供方。老手才会告诉你的事默认配置 vs 推荐配置配置项默认推荐自动同步间隔90 秒保持 90 秒60 秒是系统下限同步范围整个工作区单文件同步只共享一份文档时同步时机自动 手动重要编辑后按 CtrlS 手动触发回收站文件7 天后自动清理删重要文件前先导出本地备份# src/data/defaults/defaultSettings.yml # 自动同步间隔(毫秒), 默认 90 秒, 系统强制最低 60 秒 autoSyncEvery: 90000同步间隔别设太短弱网环境下会反复触发冲突检测。单文件同步不带工作区整体适合两人只共享一份文档的场景。手动同步一次只花几秒比等下一轮自动同步更可控。卡住了怎么办几个真实会碰到的情况两个人同时改了同一段最后谁赢了都不赢。系统以最后合并过的版本为基准做三方合并两边不冲突的改动都保留真正撞在同一处时按词级差异合并。结果不满意就打开历史面板对照旧版本。离线改的东西会丢吗不会。内容先存在浏览器本地数据库联网后排队上传断网期间继续编辑也没问题。唯一要记住本地副本存在浏览器里清浏览器数据前先同步一次。为什么历史只有 20 个版本StackEdit 上传内容时最多携带 20 个历史编号这是给合并算法找共同基准用的不是档案库。你看到的历史列表由提供方如 Google Drive维护保留多久看它自己的策略。同一个工作区开了两个浏览器窗口会互相覆盖吗不会。StackEdit 用 localStorage 里的锁保证同一时刻只有一个窗口执行同步如果持锁窗口超过 3 秒没有活动另一个窗口会自动接管。想再玩点花样想接自家存储或通知服务有两个入口src/extensions/下的扩展机制可以挂自定义逻辑写一个新的 provider 并注册进 providerRegistry同步服务就会把它和 GitHub、Google Drive 同等对待。可以从 同步服务源码 和 provider 注册表 看起照着 githubWorkspaceProvider 抄一份最容易上手。一句话带走一份文档在浏览器和云端之间自动合并最多带 20 个历史编号可供追溯想看源码git clone https://gitcode.com/gh_mirrors/st/stackedit从src/services/syncSvc.js读起。【免费下载链接】stackeditIn-browser Markdown editor项目地址: https://gitcode.com/gh_mirrors/st/stackedit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考