Git 与 rclone 与云盘备份和同步

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 个赞

如果电脑进行了其它的修改一般不是会造成冲突文件么。

就算没造成冲突文件,直接覆盖了(比如万恶Onedrive),云盘不是有历史版本纪录么,手动操作一下就好了吧。

再不然就自建服务器,自建git仓库呗。

我可能没看太明白这个方案,这是怎么解决

在手机上打着字,发现一个字的编码可以优化一下,改了,上传了云盘,但是电脑没在手边,没立刻下载最新的配置。转眼间忘了这次修改,之后在电脑上如果进行了其它的修改,直接上传,就会丢东西。

的问题的?

因为是用 rclone sync 进行同步,

rclone sync A B

它的效果是使 B 中的文件完全和 A 保持一致,无论谁最后进行了更改。所以不会产生冲突文件。

因为使用了 rclone crypt ,存储在云盘中的文件是加密的,名字也是乱码,所以云盘服务商那里提供的历史记录功能就非常难用,并且也只能用 rclone sync 来进行同步

不自建是因为想白嫖

那么现在用 git 的好处就是可以在 push 的时候知道会产生冲突,从而手动解决,而不是什么都不知道就把之前的修改弄没了

因为是 git 工作在 rclone crypt 之上,操纵着未加密的数据,所以就有了相对可用的历史记录功能

使用云盘同步git需要很谨慎,.git大量的小文件更改对云盘来说是致命的,如果是原样保存git仓库的话可能会遇到冲突,丢失。不太好保证整个同步操作是原子性的。

1 个赞

那两个工具有考虑到云盘对大量小文件的效果不佳。

所以第一个工具直接就会上传所有对象的压缩包。后一个工具有 repack 机制,默认在云盘目录中的加密文件超过25个时,再次 push 就会触发对所有文件的下载,然后将它们打包成一个文件再上传

但是我记得 rclone 不是有一个(在测试中的) bisync 命令(

是有这个命令,但是一直没试过,它的作用是双向同步,这个同步的依据是文件的最后修改时间

那么对于文件的删除它应该处理不了,两个文件进行双向同步,其中一个文件夹删掉了一个文件,rclone并不能知道这个文件是后来被删了,还是在另一个文件夹中后加的