BACKUP TOOL · OPEN SOURCE
Git 一键备份
for Linux 的定时 GitHub 快照备份:把你最怕丢的目录(笔记、配置、项目),
按节奏 rsync 进一个专用私有仓库——内容级校验、私有保护、永不强推,再配一个 GTK4
小面板一键控制。
Scheduled rsync snapshots of the folders you fear losing into a dedicated GitHub
repository — checksum-verified, private-repo-guarded, never force-pushed, with a
one-click GTK4 panel.
🐧 for Linux
systemd user timer
GTK4 面板
rsync --checksum
gh CLI
零第三方依赖
中 / EN 双语面板
本地目录 ──rsync --checksum──▶ 专用仓库工作区 ──校验通过──▶ commit ──▶ push ──▶ 远端哈希复核
▲ │
└──────────── GTK4 面板:状态 · 手动备份 · 调度开关 ◀────────────────────────┘
✨ 备份核心
- 多目录快照表:固定"源目录 → 仓库内位置"配对,绝不运行时重新发现路径
- 内容级校验:
rsync --archive --checksum复制后,再用 dry-run 逐字节复核,不过就重试 - 正在写入的文件不会坏账:mid-write 文件等写方稳定后重试;重试后仍不稳定则如实失败
- 硬性时间预算:单次运行限定秒数,到点优雅退出;已提交未推送的内容下次自动接续
- flock 防并发 + 大小守卫(100 MiB 文件拒绝提交)
- 回执制度:每轮写机器可读回执(结果 / 提交号 / 远端哈希 / 耗时),成功必须以远端哈希一致收尾
🛡️ 安全设计(一条都不让步)
- 私有仓库保护:运行前 / 推送前 / 推送后三处复核可见性,变 public 立即中止、绝不自动改回
- 仓库身份三重验证:slug、默认分支、origin URL 必须与配置一致
- 永不强推:历史分叉直接失败,绝不 merge / reset / force push;远端领先只做 fast-forward
- 工作区白名单:检出仓库只允许配置的 destination 目录有改动,无关脏路径一律拒绝提交
🎛️ GTK4 控制面板
- 一屏状态:调度开关、下次触发时间、开机自启、后台常驻(linger)、是否在跑
- 立即备份一次:systemd oneshot,窗口不卡、每 3 秒自动刷新进度
- 回执与日志尾部直接在面板里看;调度开关一键完成
⏰ 调度
- systemd 用户定时器默认每 5 小时一次 + 开机 5 分钟补跑
loginctl enable-linger之后不登录也照跑;journalctl --user -u git-backup离线可查
📦 安装
git clone https://github.com/kanghelyu/git-backup.git && cd git-backup
# 1. 脚本装到工作目录
mkdir -p ~/.local/share/git-backup
cp git-backup-run.sh backup-run-supervisor.py git-backup-panel.py \
git-backup-enable.sh git-backup-disable.sh ~/.local/share/git-backup/
chmod +x ~/.local/share/git-backup/*.sh ~/.local/share/git-backup/*.py
# 2. 写配置(把 repo_slug 和 sources 改成你的)
cp examples/config.json ~/.local/share/git-backup/config.json
cp examples/sources.json ~/.local/share/git-backup/sources.json
# 3. systemd 用户定时器
cp systemd/git-backup.{service,timer} ~/.config/systemd/user/
systemctl --user daemon-reload
loginctl enable-linger "$USER"
systemctl --user enable --now git-backup.timer
# 4. 手动验证一轮
~/.local/share/git-backup/git-backup-run.sh
cat ~/.local/share/git-backup/LAST-RUN.md
⚙️ 关键配置
| 键 | 默认 | 说明 |
|---|---|---|
repo_slug | 必填 | 备份目标仓库(建议 Private) |
branch | main | 推送分支,须与仓库默认分支一致 |
require_private | true | 仓库必须是 Private,否则拒绝运行 |
budget_seconds | 900 | 单次运行硬预算(秒) |
push_retries | 2 | 推送重试次数 |
⚠️ 免责声明:本软件按现状提供,作者不对因使用或误用造成的任何数据丢失或其它问题负责;
备份仓库是快照产物,重要数据请遵循 3-2-1 原则(本工具只覆盖其中一环)。
⚠️ Disclaimer: provided as-is; snapshots are one layer of a backup strategy — keep a 3-2-1 copy scheme for anything truly important.
⚠️ Disclaimer: provided as-is; snapshots are one layer of a backup strategy — keep a 3-2-1 copy scheme for anything truly important.
📄 许可证:PolyForm Noncommercial 1.0.0 —— 严格不可商用:个人学习、自用、修改、分享完全自由;
任何以商业利益或金钱补偿为主要目的的使用需另行获得书面授权。非传染性:修改版无强制开源义务,保留声明即可。
/ License: PolyForm Noncommercial 1.0.0 — strictly non-commercial, non-copyleft.