sf467
1
rclone 是个很好用的云盘聚合工具,它的 sync 可以很方便地在本地和云盘之间保持两个目录的一致
用它把自己各种软件的配置,笔记,rime 方案文件都备份到云盘里了。一些电脑和手机通用的文件也用云盘来同步,一端上传,另一端下载
一些问题渐渐产生
首先是 rime。对于一个自定义程度较强的小众方案,在使用过程中难免有小程度的修修改改。在手机上打着字,发现一个字的编码可以优化一下,改了,上传了云盘,但是电脑没在手边,没立刻下载最新的配置。转眼间忘了这次修改,之后在电脑上如果进行了其它的修改,直接上传,就会丢东西。
笔记也是,多端分别进行更改,很难保持一致性
开始尝试 git,在 pull 和 push 它可以进行检查。很好用,很适合我的使用场景。
但是不想用 github 和 codeberg 这些平台。笔记和码表里都有一些太过隐私的东西。哪怕私人仓库也不想往里面放
如果能把我的云盘作为加密的 git 仓库就好了。最开始的思路是这样的,rclone mount 把加密后端挂载到本地,挂载的目录被用作 git 远程仓库。向这目录写入的文件先经过 rclone 加密,然后上传到云盘。
有两个问题:首先是 git 存储的是大量小文件,这天然不太适合云盘传输。更重要的是,手机没办法这么搞。安卓不让普通用户用 fuse 挂载
终于找到这两个项目
两个都可以将 rclone 后端添加为 git 远程仓库。前一个我用着有些问题,于是找到了第二个,顾名思义,它也可以对 git 存储库再进行一次加密
像这样 git remote add origin gcrypt::rclone://MyCloud:/path
然后就可以愉快的 push 了
第二个,在 archlinux 上可以从 aur 装。在 termux 或别的操作系统上可以把可执行文件放到 $PATH 里,它是 shell 脚本,可以直接运行
1 Like
Fay
2
如果电脑进行了其它的修改一般不是会造成冲突文件么。
就算没造成冲突文件,直接覆盖了(比如万恶Onedrive),云盘不是有历史版本纪录么,手动操作一下就好了吧。
再不然就自建服务器,自建git仓库呗。
我可能没看太明白这个方案,这是怎么解决
在手机上打着字,发现一个字的编码可以优化一下,改了,上传了云盘,但是电脑没在手边,没立刻下载最新的配置。转眼间忘了这次修改,之后在电脑上如果进行了其它的修改,直接上传,就会丢东西。
的问题的?
sf467
3
因为是用 rclone sync 进行同步,
rclone sync A B
它的效果是使 B 中的文件完全和 A 保持一致,无论谁最后进行了更改。所以不会产生冲突文件。
因为使用了 rclone crypt ,存储在云盘中的文件是加密的,名字也是乱码,所以云盘服务商那里提供的历史记录功能就非常难用,并且也只能用 rclone sync 来进行同步
不自建是因为想白嫖
那么现在用 git 的好处就是可以在 push 的时候知道会产生冲突,从而手动解决,而不是什么都不知道就把之前的修改弄没了
因为是 git 工作在 rclone crypt 之上,操纵着未加密的数据,所以就有了相对可用的历史记录功能
使用云盘同步git需要很谨慎,.git大量的小文件更改对云盘来说是致命的,如果是原样保存git仓库的话可能会遇到冲突,丢失。不太好保证整个同步操作是原子性的。
1 Like
sf467
5
那两个工具有考虑到云盘对大量小文件的效果不佳。
所以第一个工具直接就会上传所有对象的压缩包。后一个工具有 repack 机制,默认在云盘目录中的加密文件超过25个时,再次 push 就会触发对所有文件的下载,然后将它们打包成一个文件再上传
Randir
6
但是我记得 rclone 不是有一个(在测试中的) bisync 命令(
sf467
7
是有这个命令,但是一直没试过,它的作用是双向同步,这个同步的依据是文件的最后修改时间
那么对于文件的删除它应该处理不了,两个文件进行双向同步,其中一个文件夹删掉了一个文件,rclone并不能知道这个文件是后来被删了,还是在另一个文件夹中后加的