跨设备同步 Markdown 笔记的几种做法
妙言自己不做同步,只读写你指定的 Markdown 文件夹,让这个文件夹在各台设备上保持一致的是 iCloud 云盘、坚果云、Dropbox 或者 git 仓库。每个文件夹只选一种同步方式,把它设为偏好设置里的「笔记位置」,剩下的交给文件同步,唯一的风险是两台设备在没同步完时改了同一篇笔记,结果会多出一份冲突副本。
怎么选同步方式
| 方式 | 适合 | 注意 |
|---|---|---|
| iCloud 云盘 | Mac、iPhone 和 iPad,登录即用 | 被系统优化掉的文件需要先下载才能读取 |
| 坚果云 | 在国内、想用桌面客户端同步文件夹的人 | 要用桌面客户端同步的本地文件夹,不是网页 |
| Dropbox | Mac、Windows、Linux 混用 | 冲突会变成「conflicted copy」文件 |
| git | 想要提交历史、能接受手动同步的人 | 不会自动同步,提交、拉取和推送都要自己来 |
如果只用苹果设备,iCloud 云盘最省事。妙言的 App Store 版本就是围绕它做的,没选文件夹并且 iCloud 可用时,应用会使用 iCloud 云盘里的一个文件夹,iPhone 和 iPad 版打开的是同一个。
文件同步到底怎么工作
网盘同步的是文件,不是笔记。每个服务都在监视文件夹,发现某个文件的内容或修改时间变了,就把整个文件上传,其他设备下载新版本替换旧版本。服务并不知道这是 Markdown,所以不能像懂文本的工具那样合并两处修改。
冲突就是这么来的。比如 iPhone 离线时你在 Mac 上改了 想法.md,又在 iPhone 上改了同一篇,iPhone 联网后,服务手里有同一个文件的两个版本,却没有谁改了什么的共同记录,只好两份都留下。Dropbox 的帮助页把这叫作冲突副本,在「多人同时编辑同一个文件」或者有人离线编辑而另一个人也在编辑时产生,副本的文件名会加上编辑者的用户名、「conflicted copy」字样和日期。
有一种情况看着像冲突,其实不是。还在下载中的文件可能被编辑器当成不存在,所以笔记文件夹需要保持离线可用,Obsidian 的同步指南也是这么说的,文件必须保持离线可用,否则可能被当作丢失。
在妙言里设置存储路径
- 在同步位置里新建一个文件夹,叫
MiaoYan或别的名字都行,位置可以是 iCloud 云盘、坚果云桌面客户端同步的本地文件夹、Dropbox 文件夹,或者 git 仓库的工作目录。 - 按 ⌘, 打开偏好设置,找到「笔记位置」。
- 点「更改」,选择这个文件夹。
- 在弹出的「重新启动妙言后生效」提示里点「确定」,因为妙言在启动时打开笔记库,新文件夹要到下次启动才会用上,取消的话仍然保留原来的文件夹。
接受文件夹之前,妙言会检查能不能读写,检查不通过就保留当前位置,并提示「妙言无法读取这个文件夹。如果这是云盘目录,请打开云盘应用,确认该文件夹已在访达中可见。」README 还补充说,这种情况不会被当作妙言的同步故障,问题出在文件夹或网盘,不在应用。
妙言不会登录 WebDAV 或网盘账号,它能看到的只有这个文件夹。
iPhone 和 iPad
iPhone 上用系统的「文件」App 选同一个网盘文件夹。README 写明了限制,如果某个网盘在「文件」里没有提供可写的文件夹,就改用 iCloud 云盘,或者先在那个网盘自己的 App 里把文件夹设为离线可用。实际结论是 iPhone 和 iPad 版用 iCloud 云盘最稳,第三方网盘取决于它的「文件」集成是否提供可写、可离线的访问。
各家服务自己怎么说
- iCloud 云盘。 苹果的指南说明了「立即下载」可以把项目取到本地离线使用,「保留下载」则能让它留在 Mac 上,即使「优化 Mac 储存空间」把较旧的文稿移到 iCloud。笔记文件夹建议用「保留下载」,这样搜索和编辑器不会碰到占位文件。
- Obsidian 的同步说明。 Obsidian 在文档里记录了 iCloud 可以在苹果设备间同步 vault,提醒 Windows 上的 iCloud 云盘可能导致文件重复或损坏,并说文件必须保持离线可用,否则可能被当成不存在。任何笔记文件夹都一样,不管用哪个应用打开。
- Git。 Git 在你提交时记录快照,Obsidian 的指南指出同步不是自动的,推送和拉取要自己做。想要清晰可控的历史,这是优点,想要开箱即用,这是缺点。
出问题时怎么查、怎么恢复
出现了一篇笔记的两份副本。 两份都打开,把需要的内容复制到要保留的那份,删掉另一份。同步服务会给多出来的文件加标记,比如 Dropbox 的「conflicted copy」,搜这几个字就能找到。
妙言提示检测到外部修改。 同步服务拉下了你正打开的笔记的新版本时,妙言会从磁盘重新加载,如果你没保存的编辑内容和磁盘上的不同,它会先把你的文字存进笔记库顶层隐藏的 .miaoyan-conflicts 文件夹,并提示「检测到外部修改,本地内容已备份~」,备份至少保留最近的 100 份,以及 30 天以内的所有文件。怀疑文字丢了的时候,先看一下这个文件夹。
某篇笔记是空的。 文件可能还没下载完,在访达里打开文件夹,把文件设为离线可用,等同步结束。
版本历史不在云端。 妙言把快照存在自己的支持目录里,不在笔记文件夹中,所以不会同步,见 Markdown 笔记的版本历史。
用 git 配合妙言。 在笔记库文件夹里提交,把 .miaoyan-conflicts/ 加进 .gitignore,避免备份文件被提交,另外除非你清楚后果,不要在同一个文件夹上同时跑 git 和网盘同步。
能避免大多数冲突的习惯
- 换设备之前先等同步完成,大多数客户端都有进度或状态提示。
- 不要在一分钟内在两台设备上修改同一篇笔记。
- 一个文件夹只用一种同步机制。
- 在同步工具之外再留一份副本,比如 Time Machine 备份,因为同步会把错误和成果一样忠实地复制过去。
想知道纯文件夹为什么值得这些麻烦,看 本地优先的 Markdown 笔记,想对同步后的文件夹写脚本,看 在终端里使用 Markdown 笔记。
妙言 Mac 版在 GitHub 开源,App Store 版本一次购买覆盖 Mac、iPhone 和 iPad。
常见问题
妙言有自己的同步服务吗?
没有,它读写你选的文件夹,由 iCloud 云盘、坚果云、Dropbox 或别的客户端去同步这个文件夹。
可以配合坚果云使用吗?
可以,在坚果云桌面客户端同步的本地文件夹里新建一个文件夹,设为笔记位置即可,妙言不直接连接坚果云或 WebDAV。
哪种方式最适合 iPhone?
iCloud 云盘,因为 README 写明了第三方网盘可能没有在系统的「文件」App 里提供可写的文件夹。
为什么改了文件夹没有生效?
笔记库是在启动时打开的,选了新的笔记位置之后需要重新启动妙言才会生效。
