git 同步笔记, oss 同步图片

本贴最后更新于 389 天前,其中的信息可能已经事过景迁

介绍: 基于 git 和阿里云 oss 的数据同步方法

这里,我介绍一种同步方式。

使用 git 来同步笔记文件。

使用 oss 来同步图片文件。

ossossutil 同步有个好处,可以删除云端无用的图片、pdf 等,避免云端数据一直增长,只保留用的上的文件。

如果隐私文件,可以选择加密后 push:这里

Git 同步的数据

比如我们的工作空间是 /data/SiYuan

那么,同步此目录,并在 .gitignore 排除下面的文件和目录,包括 assets

由于我们排除了重要文件夹 assets,我们后续需要将用其他工具来同步。

# .gitignore
# 帮助文档的笔记本
SiYuan/data/20210808180117-czj9bvb
# 图片、pdf等。
SiYuan/data/assets
# 其他的目录、文件。
SiYuan/data/.siyuan
SiYuan/data/storage/recent-doc.json
SiYuan/conf/windowState.json
SiYuan/backup
SiYuan/history
SiYuan/sync
SiYuan/temp
SiYuan/.lock

下面我们做个定时脚本来同步仓库

# auto-push.sh
git add -A
git commit -m "auto-push"
git push -f

使用 crontab5 分钟同步一次:

*/5 * * * * /data/SiYuan/auto-push.zsh

使用 ossutil 来同步 assets 目录

ossutil 是开源的工具,用于阿里云 oss 的数据上传、下载。

https://github.com/aliyun/ossutil

如何安装请看这里

我用了好久,没有产生费用,估计是我的数据少吧。

syncossutil 的一个子命令。

扩充到刚才的脚本里面:

# auto-push.sh
git add -A
git commit -m "auto-push"
git push -f

ossutil sync  \
    /data/SiYuan/data/assets \
    oss://myoss/siyuan-assets  \
    --update --delete --force

请将 myoss 改为你的 bucket 名字。

下面是我用的参数。

-f --force 强制操作,不进行询问提示。
-u,--update 只有当目标文件不存在,或源文件的最后修改时间晚于目标文件时,

ossutil 才会执行同步操作。
--delete 删除目的端指定路径下的其他文件,仅保留本次同步的文件。

警告 建议您使用**--delete**选项前开启版本控制,防止数据误删除。

ossutil sync 的文档

恢复文件

ossutil sync  \
    oss://myoss/siyuan-assets  \
    /data/SiYuan/data/assets \
    --update


还可以使用 rclone 来同步 assets

https://github.com/rclone/rclone

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22384 引用 • 89626 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 这种用法会导致文件数据锁定吗?

    1 回复
  • player

    不会。git 是开发经常使用的工具。oss 是阿里云的,同步点自己用的数据还是比百度云靠谱。没用过的的话,需要自己看文档。有开发经验的人研究起来会快。

  • powehi

    我直接用 git 管理所有的 连图片也传到 git 了感觉还可以 我是这么设置的

    ## gitignore
    /backup
    /conf
    /history
    /sync
    /temp
    /corrupted
    .DS_Store
    /data/storage/recent-doc.json
    /data/storage/local.json
    /data/.siyuan/**
    

    同步脚本是这样子

    #!/bin/bash
    
    # 获取当前时间
    current_time=$(date +"%Y-%m-%d %H:%M:%S")
    
    # 执行git add .命令
    git add .
    
    # 执行git commit -m命令,使用当前时间作为提交消息
    git commit -m "$current_time Sync"
    
    # git push
    git push
    
    
    1 回复
  • player

    也可以使用 git 的大文件管理。 https://git-lfs.com/