Skip to content

Repository files navigation

AutoSync

AutoSync

基于系统 git 的跨平台文件夹双向同步工具。双击即用,托盘常驻,自动提交、合并、冲突处理,完全无感。

Go Platform License

把任意本地文件夹变成自动同步的 git 仓库——本地改动自动提交推送,其他设备的改动自动 rebase 合并,冲突按策略自动处理且零丢失。双击 exe 弹配置窗口,填好多任务后最小化到托盘,后台定时同步,右键手动触发。

特色

  • 托盘常驻:双击启动 → 配置窗口 → 后台托盘定时同步,右键手动同步 / 暂停。开机自启一键开关。
  • 多任务:一份配置管多个文件夹,各自独立状态与锁。
  • 双向同步:本地 ⇄ 远程自动一致,rebase 合并非冲突分叉。
  • 冲突零丢失:三策略——local_wins 备份远程旧版本到分支可恢复、remote_wins 重置、abort 中止。强推一律 --force-with-lease
  • 真正无感:成功静默,仅初始化 / 冲突 / 失败弹系统通知。
  • 开箱健壮:网络操作指数退避重试、单实例锁防并发、备份分支自动清理。
  • dry-run 预览:只读输出同步计划,不联网不改仓库。
  • 自有图标:托盘 / 窗口 / exe 自有 SVG 图标,位置无关、可装只读目录。

快速开始

# 构建(需 Go 1.26+ 与系统 git;托盘版需 CGO + gcc,用 -tags traygui)
make build          # Windows 托盘版(单 exe,无控制台,双击出窗口)
make build-cli      # 纯 Go CLI 版(无托盘,快速 / 跨平台)

# 双击 AutoSync.exe → 配置窗口增删任务 → 关闭即缩至托盘 → 后台定时同步
autosync                       # 启动托盘守护(双击等同,弹窗口)
autosync install               # 开机自启(写注册表 Run 键,后台静默)
autosync sync --dry-run        # CLI 一次性只读预览

# macOS:菜单栏守护(Swift MenuBarExtra 壳 + Go 引擎子进程,须 macOS 主机)
make build-macos-app           # 产 dist/AutoSync.app(需 xcodegen + Xcode,见 macos/README-install.md)

# Linux:daemon 守护 + systemd 自启(无 GUI,对齐 Syncthing/Rclone)
make package-linux             # 产 dist/autosync-linux-{amd64,arm64}.tar.gz
# 解压 tarball → bash install-linux.sh → 编辑 ~/.config/AutoSync/autosync.conf.yaml
autosync daemon                # 前台多任务守护(systemd 即调用此命令)
autosync install               # 注册 systemd user service 开机自启

数据目录

配置与 byproduct(日志/状态/锁)统一在各平台原生数据目录,exe 位置独立——可装进 Program Files、可在任意位置双击。可用 AUTOSYNC_DATA_DIR 覆盖。

平台 数据目录
Windows %AppData%\AutoSync
macOS ~/Library/Application Support/AutoSync
Linux ~/.config/AutoSync
<数据目录>/
  autosync.conf.yaml   # 多任务配置(daemon/托盘共用,Linux 手编 / Win/macOS GUI 管理)
  config.yaml          # CLI 单任务配置
  logs/  state/  locks/

架构

flowchart TB
  EXE[autosync.exe 双击] --> APP[托盘守护 TrayApp]
  APP --> WIN[配置窗口 多任务 CRUD] & MENU[托盘菜单 手动/暂停/自启]
  APP --> SCHED[TaskScheduler 每任务 ticker]
  SCHED --> RUN[TaskRunner]
  RUN --> SYNC[Syncer 状态机]
  SYNC -->|shell out| GIT[(系统 git)]
  RUN --> STATE[每任务 state] & NOTIFY[系统通知]
  REG[注册表 Run 键] -->|登录自启| APP
Loading

Syncer 依赖 GitOperator 接口(依赖倒置),shell out 调系统 git,不内嵌 git 库。托盘用 Fyne(构建标签 traygui 隔离,默认构建纯 Go)。Linux 走 daemon 子命令 + systemd user service(无 GUI)。详见 docs/tech.md

平台

平台 同步核心 守护 开机自启
Windows ✅ Fyne 托盘 ✅ 注册表 Run 键
macOS ✅ MenuBarExtra(Swift 壳) ✅ SMAppService
Linux ✅ daemon 守护(无 GUI) ✅ systemd 自启

文档

prd · tech · api · flow · TODO · plan

路线图

后续:实时文件监听、HTTPS token 引导、连续失败降噪、托盘状态回显、macOS 代码签名公证、daemon 运行时控制(手动同步/暂停 IPC)。

完整方向见 docs/TODO.md

License

MIT

About

跨平台 Git 双向同步工具:配置一次,自动提交 / 合并 / 冲突处理,完全无感。单二进制,Go + 系统 git。

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages