Remotely Save 同步插件大型更新

ob 就象当年的TC,稳定后,时间久了,就把里面的道道机制都忘得差不多了,但不影响使用TC,因为软件自洽性确是好,个性好后,就可以不用折腾了。

这样描述可能就明白了:
设定ob的附件目录 A,A里暂时无文件,为了不让移动设备索引,里面先放置了一个.media文件。
设定ob的日记目录B,B里暂时也无文件,也放了一个.media。

rs同步,不同步空目录,也不同步.media文件。
这样,ob运行时,创建日记和图片也不会自动创建这两个目录。
现在,我当然知道是什么回事,但若干岁月之后,可能就想不起,以为碰上怪异了。

所以,我建议,在安全和全面这两处,能做好些就做好些。

昨天,按你的方式,试把win上的一个骨架OB,放到安卓上,用rs同步,结果,反复出现两侧无故删文件,最后,要从win的回收站找回删除掉的文件,但安卓的runjs插件运行的脚本,也不知什么原因,运行不正常。最后,只得用goodsync整库同步到安卓,才能在安卓上恢复正常。分析,应付,找回文件,足足花了个多小时。
就同步十多个文件,也这样,若是文件多,就更加不清不楚了。而且导出的同步计划,列出了所有文件,在win里查看都响应缓慢,里面的内容,也不适合最终用家,只适合门清的开发人员。

过程是这样:
win建了一个测试的骨架ob,已多次rs,之前主力Ob里修改的模板和脚本是直接用资源浏览器里复制粘贴到骨架ob。
昨晚则是在goodsync里建了一个任务,单向复制这些模板和脚本到骨架ob(我认为这个就如正常的文件操作,应该不影响rs)
然后,
win ob, rs 同好步
goodsync 整库同步到 android
删除android ob里的数据目录和文件,只保留了.obsidian目录和需要有.nomedia文件的空目录和.nomedia文件。
android ob 重启,提示一堆文件缺失,直接rs
android ob 重启,runjs 提示模板目录里一个js没有了,查看存储,发现被删除了,win 里回收站恢复文件,win ob rs
android ob rs,又发现另一个目录几个文件被删除,又在win回收站里恢复
win ob rs, android ob rs
win ob 所有插件功能正常,但android ob上runjs插件要运行的脚本一个也无执行,反复在android ob上禁用启用runjs,结果一样,但相关脚本又已在存储里。
试在win ob里导出计划,分析一个文件有无被删除都很麻烦,在win ob里也不好查看。
最后,只得win ob的rs 开启100%模式,rs同步一次,然后整 库goodsync到android ob。
android ob终于运行正常了。

删除android ob里的数据目录和文件,只保留了.obsidian目录和需要有.nomedia文件的空目录和.nomedia文件。

已经说过了啊,rs 不识别这个规则,对于 rs 来说,你就是删除了啊。此外,真的,不要混用两个软件。混用软件出现混乱,是很常见的。不要做过多假设。

留一个空库下载,不就是要这样处理吗? 不管是在那台设备上删除,都是删除啊。

现在最可靠的,还是整库复到新设备,然后让rs合库同步一次。但概念上,不明白,既然A和B是一样的,那为什么A里的rs能正常同步,到了B里反而不能正常同步。
goodsync保证了A和B在文件层面上是完全一样的。

这个不叫空库啊。

另外这段太复杂了,强烈建议不要混用两个同步软件。只用rs从0开始操作是无问题的。

这里已经解释得很清楚为什么不兼容 good sync 了。强烈建议只用一个软件不要混用哈。

我明白你意思,就是要在安卓上直接新建新库,再下载安装rs,再手工配置好rs,再同步,再一步步配置自己的环境。
也就是最后一次同步的信息是写在rs的data文件里的,而且这个信息还要匹配设备,即使文件完全一样,同步信息发现设备变了,也作为未同步过。

那么:

  1. 配置里的【重设本地缓存和数据库】,是抹去所有的同步信息,相当于刚配置好rs的webdav的状态吗?
  2. 能提供一个功能,在oba已同步后,把oba完全移到另一台设备变成obb,直接把obb也标识成已同步,让obb再同步时,效果如何oba再同步?

是的

不能,技术上极难

能解释清楚同步的规则吗?
我测试的结果是这样,和你的程序逻辑有出入吗?

原本,我以为你把同步信息放在data文件里,但我关闭了混洗后,data里只有纯配置信息。
请问同步信息是放在哪里?

我不知你说的技术难点在哪,是因为同步信息没有被 goodsync完整同步过去吗?导致命中有无有规则,全部下载一遍了。

既然这样,把同步信息也完整同步过去,不就可以了?

同步信息放在 indexeddb 里。

工程层面有很多细节。会考虑的。

我搜了一下,在AppData\Roaming\obsidian\IndexedDB,是ob api提供的结构化数据存储接口吗? 能文件级同步给移动端?

  1. 使用加密方式时,每次同步都要把远端所有文件下载一次吗?文件比较时,有用hash值比较吗?
  2. 算法逻辑是如何判断以下情况:
    local modified
    remote modified
    local create
    remote create

我觉得呢,关于同步机制的细节可以先放一下,这些如果有兴趣了解的话,可以在 github 上详细阅读代码和文档,都是源代码公开的,所有细节都一目了然。如果是通过论坛上一问一答方式,那是一个月都讲解不完的,你上述的几个问题,大部分都在设计文档里的,可以自行查阅哈,细节要深究起来有几千行代码;有一些方向,都考虑过,实际上做起来会有很多边界条件处理,也受限于 obsidian api、web api、云端 api、用户诉求、多端处理、是否适用手机、是否容易对用户解释等各种限制。

此外所有的同步文件,都是“optionate”的,icloud、onedrive、goodsync、syncthing、rclone、obsidian sync (官方)、remotely save 等,都会有略有不同和特有的设计思路和假设,不可能说某款的功能在另一款能重现或者完全兼容,也强烈建议不要混用。比如说 nomedia 文件我之前都没听说过自然不会兼容或特殊处理,一些用户觉得显然的对另一些不是显然的,本插件力图对大部分用户的需求做平衡,做 roi 较高的改动。

原始的“丢文件”问题,就是混用的问题,不要混用,或关闭保护全同步一次之后不混用,就顺畅了;这不是 bug 哈。之前提的的一些建议,都收到了,会综合考虑的。

1 个赞

执行同步-空跑模式
是否不需要上传和下载,但是把同步信息已写入indexdb ?

重设本地缓存和数据库
这个是不是就是清除indexdb所有同步信息,相当于一个无使用过RS同步的库?

我觉得,配置里,缺一个“重置远端数据库”, 这样,不用去web自己删除运端的同步目录,这在停用rs一段时间后,重新启用时,用意义。

目前最需要的是能有一份精简的,只包含pull,push,dellocal,delremote的清单,代替那个同步计划输出,当修改同步提示信息是info时,就是精简清单,debug时就原来的计划。

有个配置:手机显示状态栏(试验),我在安卓上开启,无效果。
同步信息,手机端建议写在左上角home按钮显示多少个文件多少个夹的信息的下面。

代码无这个功力!只是想清清所所地使用。

  1. 算法逻辑是如何判断以下情况:
    local modified
    曾同步且同步后有修改?
    remote modified
    这个觉得不准确吧,远端只保留了文件,是否现在是这样粗略判断:曾同步且远端日期晚于整库最后同步日期?
    local create
    无同步信息
    remote create
    无同步信息

不是

不需要的,这个你看了代码就明白了

不需要的

好的会考虑的

好的会考虑的

不看代码,那就不需要深究细节哈。

准确的,不是你说的这样判断

不是

  1. 重设本地缓存和数据库
  2. 同步,提示超50%
  3. 开100%,执行空跑
  4. 远端文件和本地文件都不影响
  5. 开50%,
  6. 修改一个文件,正常同步,不提示超50%,只push了修改的文件
  7. 另一台手机正常同 步这个修改的文件。

所以,我认为这个空跑,可以这样用。