Overleaf项目文件同步工具: olsync

news/2025/9/26 21:15:56/文章来源:https://www.cnblogs.com/xuhe2/p/19114012

Hi! 我编写了一个用于Overleaf项目备份的命令行工具olsync, 希望可以帮助你更好的管理你的latex项目以及私有化的Overleaf服务实例.

如果喜欢, 请点一个Star, 谢谢

olsync 是一个简单的命令行工具,用于将你的 Overleaf 项目进行异地同步,从而轻松备份和管理离线 LaTeX 项目。

为什么需要 olsync

Overleaf 官方提供的项目同步功能(如 Git 访问或同步到 GitHub)是 付费功能,只有订阅了高级版才可以使用。
而如果你使用的是 自建 Overleaf 服务,同步功能同样需要购买付费版本才会开放。

此外,自建 Overleaf 服务虽然便于团队协作,但 硬盘一旦损坏或服务器意外宕机,就可能导致项目文件丢失
因此,最稳妥的做法是 定时将 Overleaf 项目异地备份,避免单点故障带来的风险。

olsync 正是为此而生:它可以在不依赖付费功能的前提下,自动下载并同步 Overleaf 项目,帮助你轻松完成本地备份。

  • 并且未来计划实现和Overleaf官方同步服务一样的Github自动同步功能(更好的异地备份和用户体验)

为了不付钱给overleaf在我写论文的时候烦我, 我探索和编写本地部署overleaf服务帮助latex论文编写这篇博客到现在自动备份数据防止丢失, 真的是花了一些功夫

对比其他工具

相比通用的文件同步工具(如 Syncthing),olsync 更适合 Overleaf 项目的备份场景。
首先,我的自建 Overleaf 服务是通过 Docker 部署的,项目数据文件夹的 owner 并非当前用户,直接同步需要 sudo 权限,使用不便。
其次,Overleaf 的备份应当 面向具体的 LaTeX 项目,而不是面向整个数据库或文件卷,这样才能精确控制需要备份的项目,避免无关文件。
最后,olsync 提供简洁的命令行接口,结合定时任务即可实现自动化备份,比通用同步工具更轻量、更符合日常需求。

olsync

Github: https://github.com/xuhe2/olsync

功能

  • 自定义服务地址
    通过 baseUrl 指定 Overleaf 服务的主页地址,支持自建 Overleaf 服务。

  • 灵活的备份路径
    可通过 backup.path 设置备份文件保存位置,支持相对路径和绝对路径。

  • 定时任务支持
    使用 backup.schedule 配置 Cron 表达式,实现定时自动备份,例如每 6 小时执行一次。

  • 备份数量控制
    通过 backup.keep_last 设置保留的最近备份数量,自动清理过期文件,避免磁盘占满。

  • 按项目筛选备份
    projects.include 中列出需要备份的项目名称,只备份指定的 LaTeX 项目,避免无关项目占用空间。

Usage

Install

olsync 的使用方法可参考项目的 README。
安装方式非常简单,可以选择以下两种方法:

  1. Clone 仓库并编译
git clone https://github.com/xuhe2/olsync.git
cd olsync
make build
  1. Go install
go install github.com/xuhe2/olsync@latest

从浏览器中获取cookie并且配置好config.yaml就可以

参考config.template.yaml文件

Config

# config.yaml
# This file contains the configuration for the olsync application.overleaf:# The base URL for the Overleaf API.# This should typically be "https://www.overleaf.com".baseUrl: "https://www.overleaf.com"# baseUrl: "http://localhost:8880" # local overleaf server# The session cookies required for authentication.# You can get these from your browser's developer tools after logging in.cookies:- name: "overleaf_session2"value: ""# for local overleaf server# - name: "overleaf.sid"#   value: ""backup:path: "./Backup"            # 备份文件夹,支持相对路径schedule: "0 * */6 * * *"     # Cron 表达式,每 6 小时备份一次keep_last: 5                # 保留最近 5 个备份,自动清理旧文件projects:include:                        # 通过项目名列表来确定需要备份哪些项目- "quick-LaTeX"

按照需求填写即可

Run

./bin/olsync-linux-amd64 ./config.yaml

效果

我每隔一分钟备份一个项目进行验证

image

检查备份文件

image

未来计划

未来计划中,olsync 将支持自动同步到 GitHub,实现与 Overleaf 官方付费功能类似的体验。
该功能将基于 Go 的 go-git 包实现,能够在每次成功备份后自动将项目内容推送到指定的 Git 仓库。
这将使用户不仅可以本地备份,还能享受版本管理和远程冗余存储,进一步降低数据丢失风险。

TIP: 异常容忍

在备份过程中,如果由于网络问题导致部分项目下载失败,olsync 仍会继续尝试备份其他项目,保证尽量多的项目被保存。
但此时该次备份文件夹是不完整的,不会触发 keep_last 的旧备份清理逻辑,只有当本次所有项目均备份成功时才会清理旧文件夹。

这意味着在网络不稳定的情况下,可能会出现备份文件夹数量逐渐增加的情况,需要用户自行检查并清理不完整的备份或者等待第一次完整备份的出现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1995D Cases

CF1995D Cases 题意: 给定一个长为 \(n\),字符集大小 \(c=18\) 的字符串,给定一个整数 \(m\) ,你需要求出一个字符集合 \(S\) 满足在原串中每 \(m\) 个字符中至少有一个被包含在集合 \(S\) 中。 其中 \(m\le n\le …

日志| 编辑距离 | 最长有效括号 |

力扣解题思路 动态规划核心思想 :初始化 + 填充 第一次提交 1状态转移: 左上到cur 是 替换(相同则继承左上) 上到cur 是 删除 左到cur 是 添加 2初始化: 第一行=空字符变成目标字符串的次数 第一列=原字符串变成空字…

网站建设毕业设计过程杭州电商网站开发

概述 - QML 和 C++ 集成 QML 旨在通过 C++ 代码轻松扩展。 Qt QML 模块中的类允许从 C++ 加载和操作 QML 对象,并且 QML 引擎与 Qt 元对象系统集成的特性使 C++ 功能可以直接从 QML 调用。 这允许开发使用 QML、JavaScript 和 C++ 代码混合实现的混合应用程序。 集成 QML 和 C…

UniApp ConnectSocket连接websocket - 详解

UniApp ConnectSocket连接websocket - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

《etcd库——键值存储系统》 - 教程

《etcd库——键值存储系统》 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

9/26

9/26今天我学习了英语听说的相关知识,在英语口语上有了进一步的感悟与进步。学习了一些算法相关的网课弥补课上的不足

有一个函数只会返回0和1,且返回0和返回1的概率不等。要求只能通过这个函数生成一个等概率返回0和1的函数

有一个函数只会返回0和1,且返回0和返回1的概率不等。要求只能通过这个函数生成一个等概率返回0和1的函数题目分析这个函数只会生成0和1,虽然不等概率,但是如果我们roll两次,只记录结果是(0,1)和(1,0)的这两种情况。…

AI智能体开发实战:17种核心架构模式详解与Python代码实现

在构建一个大规模 AI 系统时,我们其实就是在把不同的“智能体设计模式(agentic design patterns)”组合起来。不管系统多复杂都可以拆解成有限的几种"设计模式"。这些模式各有各的用法——有的专门负责思…

代码随想录算法训练营第十天 | 232. 用栈实现队列、225. 用队列实现栈、20. 有效的括号、删除字符串中的所有相邻重复项

都很简单不赘述type MyQueue struct {StackinTop intStackOutTop intStackIn []intStackOut []int }func Constructor() MyQueue {StackIn := make([]int,0)StackOut := make([]int,0)return MyQueue{StackinTop: 0,St…

文书写作网站百度收录查询api

精讲部分,主要是对Transformer的深度理解方便日后从底层逻辑进行创新,对于仅应用需求的小伙伴可以跳过这一部分,不影响正常学习。 1. 残差模块 何凯明在2015年提出的残差网络(ResNet),Transformer在2016年…

网站app软件下载安装做语文题的网站

Xsens DOT可穿戴传感器介绍及示例应用演示 搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示

深度学习周报(9.15~9.21) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025.9.26总结 - A

今天就一节英语,感觉还可以

关于“悬荡悟空”决策机制的简要技术说明

关于“悬荡悟空”决策机制的简要技术说明 “悬荡悟空”是一种尚处于构想阶段的智能决策机制,其核心在于尝试使系统具备在复杂情境中进行多路径因果并行推演与价值权衡的能力。 该机制在极端场景(如自动驾驶面临的突发…

最小二乘问题详解1:线性最小二乘

最小二乘法通过最小化误差平方和来寻找数据的最佳拟合模型,其核心原理在线性情况下可通过代数或几何方式推导出正规方程,揭示了参数估计与向量空间正交投影之间的深刻联系。1. 引言 最小二乘可以说是现代科学与工程的…

完整教程:分布式ID解决方案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20250926周五日记

20250926周五日记vision.middlebury.edu/stereo/data 计算机视觉领域的权威评测平台,可下载深度标签数据集。 https://github.com/googleinterns/IBRNet https://github.com/VITA-Group/GNT?tab=readme-ov-file http…

工程监理行业多模态视觉​​​​​​​大模型系统,打造工地行业全场景的监理智能生态

建筑工程监理行业在面对复杂多变的施工现场时,传统的监理方式面临诸多挑战。文明施工监管困难重重,难以实时监督施工现场的围挡是否达标、垃圾是否及时清运、施工道路是否硬化等;基坑风险排查依靠人工,效率低下且难…

济南哪家网站技术比较高老房装修

【网络取证箱】网络取证在线分析工具箱 在线网站查询工具箱,没什么介绍的,所见即所得,在本文档里补充了其它一些网络安全资源,请忽用于非法活动,仅供学习研究—【蘇小沐】 (一)Whois查询 主要…

淄博网站制作托管优化泉州网站制作专业

速率 指快慢 比特:1/0(1位比特) 速率:单位换算1000倍(小写b),如,b/s比特每秒;kb/s千比特每秒 存储容量:单位换算1024倍(大写B),如B字节&#xf…