← Back to Plugins
Tools

Gh Sync

liwmj By liwmj 👁 27 views ▲ 0 votes

OpenClaw 实时 GitHub 同步插件 — 多设备工作区双向同步、定时备份存档、跨设备迁移恢复

Homepage GitHub

Install

openclaw plugins install clawhub:@liwmj/openclaw-gh-sync

Configuration Example

{
  "repo": "https://github.com/用户名/仓库名",   // 同步目标仓库(必填,仅支持 HTTPS)
  "branch": "instances/desktop",               // 当前设备分支,由实例名自动生成
  "instanceName": "desktop",                   // 当前设备标识
  "include": ["."],                            // 要同步的目录,相对于 OpenClaw 数据目录
  "exclude": [                                 // 排除同步的 glob 模式
    "gh-sync/**",                              //   插件自身的缓存和数据不参与同步
    "logs/**",
    "**/*.log", "**/*.tmp", "**/*.pid", "**/*.sock",
    "delivery-queue/**",
    "session-delivery-queue/**",
    "cron/runs/**",
    "**/node_modules/**",
    "**/.git/**"
  ],
  "pushDebounceMs": 2000,                      // 文件变更后等待多久再提交推送(毫秒)
  "pollIntervalSec": 60,                       // 远程拉取间隔(秒),最小 5 秒
  "backupIntervalH": 6,                        // 定时备份间隔(小时),最小 1 小时
  "backupRetain": 7,                           // 保留最近多少个备份存档(超出自动删除)
  "gitCryptEnabled": true                      // 是否启用 git-crypt 加密
}

README

# @liwmj/openclaw-gh-sync

OpenClaw 实时 GitHub 同步插件——将本地 OpenClaw 工作区双向同步到 GitHub 仓库,同时定时创建和上传官方备份存档。

## 它能做什么

- **多设备同步**:家里的电脑和公司的笔记本共享同一套 OpenClaw 配置、工作区文件、会话记录
- **备份与恢复**:定时通过 `openclaw backup create --verify` 创建官方备份存档,上传到 GitHub 仓库。误删或重装系统后一键恢复
- **跨设备迁移**:新电脑直接从旧机器的 GitHub 分支拉取完整状态,无需手动拷贝
- **版本历史**:所有变更通过 Git 提交,随时回溯任意时间点的状态

## 快速安装

```bash
openclaw plugins install clawhub:@liwmj/openclaw-gh-sync
```

> 要求 Node.js >= 22.22.3,OpenClaw >= 2026.3.24

## 首次配置

安装后运行初始化向导:

```bash
openclaw gh-sync setup
```

向导会依次询问四项信息:

| 步骤 | 说明 |
|---|---|
| **GitHub 仓库** | 用于同步的仓库地址,格式 `https://github.com/用户名/仓库名`。可以是空仓库,插件会自动创建分支结构 |
| **Personal Access Token** | GitHub 个人访问令牌,需要 `repo`(仓库读写)权限。存储在工作目录下 `.git-credentials` 文件中(权限 0600,不会被提交到仓库) |
| **实例名称** | 当前设备的标识,只能包含小写字母、数字和连字符(最长 40 个字符),如 `desktop`、`macbook-pro`。每台设备对应仓库中独立的分支 `instances/<实例名>` |
| **git-crypt** | 可选加密方案。如果安装了 git-crypt,推荐启用,敏感文件在远程仓库中会以加密形式存储 |

配置完成后,每次 OpenClaw 网关启动时会自动启动同步引擎。使用 `openclaw gh-sync status` 查看运行状态。

## 自动化机制

插件在后台运行三个异步循环:

### 自动推送(Push)
本地文件变更时自动触发:
1. chokidar 文件监视器检测到变更
2. 等待 2 秒消抖(可配置),将变更文件复制到镜像目录
3. git add → commit → push 到远程仓库

### 定时拉取(Pull)
每 60 秒(可配置)检查远程变更:
1. 从远程拉取当前设备分支的最新提交
2. fast-forward 合并本地
3. 将远程变更的文件复制回本地工作区

### 定时备份(Backup)
每 6 小时(可配置)创建一次备份:
1. 调用 `openclaw backup create --verify --output <备份目录> --json` 生成存档
2. 提交并推送到仓库的 `backups/` 目录
3. 按保留数量自动清理旧存档(默认保留最近 7 个)

## 命令参考

| 命令 | 说明 |
|---|---|
| `openclaw gh-sync setup` | 交互式初始化配置向导 |
| `openclaw gh-sync status` | 查看同步状态:配置信息、连接时间戳、ahead/behind 计数、冲突文件列表、备份列表 |
| `openclaw gh-sync push` | 立即执行一次推送 |
| `openclaw gh-sync pull` | 立即执行一次拉取 |
| `openclaw gh-sync sync` | 立即执行一次完整同步(拉取 + 推送) |
| `openclaw gh-sync backup` | 立即创建并上传一份备份存档 |
| `openclaw gh-sync restore --dry-run` | 预览恢复操作会变更哪些文件 |
| `openclaw gh-sync restore --yes` | 从最新备份存档恢复本地状态 |
| `openclaw gh-sync conflicts` | 查看当前存在的合并冲突文件 |

## 恢复与迁移

### 从备份恢复

恢复本设备分支上最新的备份存档:

```bash
# 先预览
openclaw gh-sync restore --dry-run

# 确认无误后恢复
openclaw gh-sync restore --yes
```

### 从其他设备迁移

换新电脑时,从旧设备的分支恢复状态:

```bash
# 拉取旧设备(如笔记本电脑)的最新备份
openclaw gh-sync restore --from-instance laptop --dry-run

# 确认后执行
openclaw gh-sync restore --from-instance laptop --yes
```

此操作会从远程拉取 `instances/laptop` 分支,提取最新的备份存档,校验完整性后解压写入本地工作区。

### 指定快照文件恢复

```bash
openclaw gh-sync restore backup-2026-08-10.tar.gz --yes
```

## 配置参考

配置文件位置:`~/.openclaw/gh-sync/config.json`,由 `openclaw gh-sync setup` 自动生成,也可以手动编辑。

```jsonc
{
  "repo": "https://github.com/用户名/仓库名",   // 同步目标仓库(必填,仅支持 HTTPS)
  "branch": "instances/desktop",               // 当前设备分支,由实例名自动生成
  "instanceName": "desktop",                   // 当前设备标识
  "include": ["."],                            // 要同步的目录,相对于 OpenClaw 数据目录
  "exclude": [                                 // 排除同步的 glob 模式
    "gh-sync/**",                              //   插件自身的缓存和数据不参与同步
    "logs/**",
    "**/*.log", "**/*.tmp", "**/*.pid", "**/*.sock",
    "delivery-queue/**",
    "session-delivery-queue/**",
    "cron/runs/**",
    "**/node_modules/**",
    "**/.git/**"
  ],
  "pushDebounceMs": 2000,                      // 文件变更后等待多久再提交推送(毫秒)
  "pollIntervalSec": 60,                       // 远程拉取间隔(秒),最小 5 秒
  "backupIntervalH": 6,                        // 定时备份间隔(小时),最小 1 小时
  "backupRetain": 7,                           // 保留最近多少个备份存档(超出自动删除)
  "gitCryptEnabled": true                      // 是否启用 git-crypt 加密
}
```

## 仓库结构

插件在你的 GitHub 仓库中创建如下目录结构:

```
仓库根目录/
├── instances/
│   └── desktop/                     # 以你的实例名称命名
│       ├── config.json              # 本机同步配置
│       ├── instance.json            # 实例元数据(名称、主机名、创建时间)
│       ├── .git-credentials         # PAT 凭证文件(不会被提交)
│       ├── openclaw/                # 镜像工作区
│       │   └── workspace/           # 你的 OpenClaw 工作区文件
│       └── backups/                 # 备份存档(.tar.gz)
└── instances/
    └── laptop/                      # 另一台设备的实例分支
        └── ...
```

每台设备拥有独立分支,互不干扰。备份存档统一存放在各自分支的 `backups/` 目录中。

## 安全说明

- **PAT 凭证**:存储在 `.git-credentials` 文件中,权限 0600(仅所有者可读写),已加入 `.gitignore`,不会被提交到远程仓库
- **仓库 URL**:强制要求 `https://github.com/*` 格式,不允许 SSH 地址或明文密码
- **git-crypt 加密**:启用后远程仓库中的镜像文件处于加密状态。请务必妥善保存加密密钥:
  ```bash
  cd ~/.openclaw/gh-sync
  git-crypt export-key /安全位置/gh-sync.key
  ```

## 常见问题

| 现象 | 解决方法 |
|---|---|
| 提示 `not configured` | 运行 `openclaw gh-sync setup` 完成初始化配置 |
| 提示 `repo must be an https GitHub URL` | 配置中的仓库地址不是 HTTPS 格式,改为 `https://github.com/...` |
| 空仓库 / 远程分支不存在 | 正常运行即可,首次推送会自动创建分支和目录结构 |
| 出现合并冲突 | 运行 `openclaw gh-sync conflicts` 查看冲突文件。冲突文件会保留为 `.ours.<时间戳>` 和 `.theirs.<时间戳>` 副本,不会丢失数据 |
| 找不到 git-crypt | 安装 git-crypt(macOS: `brew install git-crypt`,Ubuntu: `sudo apt install git-crypt`),或在配置中将 `gitCryptEnabled` 设为 `false` |
tools

Comments

Sign in to leave a comment

Loading comments...