OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  gitclaw:将 OpenClaw 工作区备份至 GitHub 并保持同步

gitclaw:将 OpenClaw 工作区备份至 GitHub 并保持同步

 
  database ·  2026-02-02 13:25:17 · 19 次点击  · 0 条评论  

名称: gitclaw
描述: 将 OpenClaw 智能体工作区备份至 GitHub 仓库,并通过定时任务脚本保持同步。
主页: https://gitclaw.ai
元数据: { "openclaw": { "emoji": "🐙", "homepage": "https://gitclaw.ai" } }


GitClaw:智能体自动备份至 GitHub

使用场景

当本技能被安装或引用时自动启用,或在用户提出以下需求时使用:
- 备份/同步/镜像 OpenClaw 工作区
- 设置定期提交与推送
- 为智能体安装/配置 GitHub 备份自动化

行为准则(重要)

  • 自动、静默地执行所有操作。
  • 仅在以下情况通知用户:
  • 需要输入信息(仓库名、可见性、可选频率),或
  • Git/GH/Cron 安装失败,或
  • GitHub 认证需要用户在浏览器/设备端完成操作,或
  • Git 操作失败(冲突、权限等)。

需要向用户获取的输入

请向用户询问:
1. 仓库名称(例如 openclaw-backup
2. 可见性public(公开)或 private(私有)
3. (可选)备份频率(分钟,默认值:60

不要询问个人访问令牌。我们使用 gh 进行认证。


步骤 1:确保前置条件(自动安装)

1A) 确保 Git 已安装(自动安装;不中断)

检查:
- git --version

若未安装,使用最佳可用方法安装:
- 若存在 brew
- brew install git
- 若存在 apt-get
- sudo apt-get update && sudo apt-get install -y git
- 若存在 dnf
- sudo dnf install -y git
- 若存在 yum
- sudo yum install -y git
- 若存在 pacman
- sudo pacman -S --noconfirm git
- 若存在 zypper
- sudo zypper install -y git
- 若存在 apk
- sudo apk add git
- 若为 macOS 且存在 xcode-select
- xcode-select --install(可能会提示用户)
- 其他情况:
- 告知用户无法在此操作系统上自动安装 Git,并显示检测失败输出。

重新检查:
- git --version

仅在安装失败时通知用户。

1B) 确保 cron/crontab 可用(尽力自动安装)

检查:
- command -v crontab

若未安装,尝试安装:
- 若存在 apt-get
- sudo apt-get update && sudo apt-get install -y cron
- sudo systemctl enable --now cron || sudo service cron start || true
- 若存在 dnf
- sudo dnf install -y cronie
- sudo systemctl enable --now crond || true
- 若存在 yum
- sudo yum install -y cronie
- sudo systemctl enable --now crond || true
- 若存在 pacman
- sudo pacman -S --noconfirm cronie
- sudo systemctl enable --now cronie || true
- 若存在 apk
- sudo apk add dcron
- sudo rc-update add dcron default || true
- sudo rc-service dcron start || true
- 其他情况:
- 若无法安装,告知用户定时任务需要 cron。

重新检查:
- command -v crontab


步骤 2:确保 GitHub CLI (gh) 已安装(自动安装)

检查:
- gh --version

若未安装,安装:
- 若存在 brew
- brew install gh
- 若存在 apt-get(首选官方 GitHub CLI 包):
- 使用官方 apt 仓库步骤安装:
- (type -p wget >/dev/null || (sudo apt-get update && sudo apt-get install -y wget))
- sudo mkdir -p -m 755 /etc/apt/keyrings
- out=$(mktemp) && wget -nv -O"$out" https://cli.github.com/packages/githubcli-archive-keyring.gpg
- cat "$out" | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
- sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
- sudo mkdir -p -m 755 /etc/apt/sources.list.d
- echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
- sudo apt-get update && sudo apt-get install -y gh
- 若存在 dnf
- sudo dnf install -y 'dnf-command(config-manager)' || sudo dnf install -y dnf5-plugins || true
- sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo || sudo dnf config-manager addrepo --from-repofile=https://cli.github.com/packages/rpm/gh-cli.repo || true
- sudo dnf install -y gh --repo gh-cli || sudo dnf install -y gh || true
- 若存在 yum
- type -p yum-config-manager >/dev/null || sudo yum install -y yum-utils
- sudo yum-config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
- sudo yum install -y gh
- 若存在 zypper
- sudo zypper addrepo https://cli.github.com/packages/rpm/gh-cli.repo || true
- sudo zypper ref
- sudo zypper install -y gh
- 若存在 pacman
- sudo pacman -S --noconfirm github-cli
- 若存在 apk
- sudo apk add github-cli
- 其他情况:
- 告知用户无法在此操作系统上自动安装 gh

重新检查:
- gh --version

仅在安装失败时通知用户。


步骤 3:确保用户在 gh 中已认证(智能体执行流程)

检查:
- gh auth status --hostname github.com

认证:
1. 运行:
- gh auth login --hostname github.com --git-protocol https
2. 终端流程将显示一次性代码并要求用户授权。
- 告知用户在浏览器中打开 https://github.com/login/device,输入终端显示的代码并授权。
3. 登录后:
- gh auth setup-git
4. 再次验证:
- gh auth status --hostname github.com

若认证失败,停止并报告确切的终端输出。


步骤 4:在 OpenClaw 工作区初始化 Git 并连接/创建仓库

工作区目录(存储 SOUL.md、AGENTS.md 等的位置):
- 示例(路径可能因环境而异):WORKSPACE_DIR="$HOME/.openclaw/workspace"

  1. 确保工作区存在:
    - mkdir -p "$WORKSPACE_DIR"
    - cd "$WORKSPACE_DIR"
  2. 如需则初始化仓库:
    - 若 .git 不存在:git init
    - git branch -M main
  3. 配置确定性提交身份(仅本地):
    - git config user.name "gitclaw.ai"
    - git config user.email "gitclaw-bot@users.noreply.github.com"
  4. 确定已认证的 GitHub 用户名(所有者):
    - OWNER="$(gh api user --jq .login)"
    - (除非调试需要,否则不打印)
  5. 仓库名称与可见性:
    - REPO="<用户提供的仓库名>"
    - 可见性:
    • public => --public
    • private => --private
  6. 确保至少有一次提交(首次推送/定时任务所需):
    - 如需则创建标记文件:
    • test -f .gitclaw.keep || printf "gitclaw initialized: %s\n" "$(date -u '+%Y-%m-%dT%H:%M:%SZ')" > .gitclaw.keep
    • git add -A
    • git commit -m "gitclaw: initial backup" || true
  7. 创建或重用目标仓库:
    - 若仓库已存在:
    • gh repo view "$OWNER/$REPO" >/dev/null 2>&1
    • 设置远程:
    • REMOTE_URL="https://github.com/$OWNER/$REPO.git"
    • 若 origin 存在:git remote set-url origin "$REMOTE_URL"
    • 否则:git remote add origin "$REMOTE_URL"
    • 尝试快速同步(避免覆盖远程历史):
    • git fetch origin main || true
    • git merge --ff-only origin/main || true
    • 若仓库不存在:
    • 非交互式创建并连接:
    • 公开:
      • gh repo create "$REPO" --public --confirm
    • 私有:
      • gh repo create "$REPO" --private --confirm
    • 设置远程:
    • REMOTE_URL="https://github.com/$OWNER/$REPO.git"
    • git remote add origin "$REMOTE_URL" || git remote set-url origin "$REMOTE_URL"
  8. 初始推送:
    - git push -u origin main

若推送因冲突或非快进而失败:
- 不要自动强制推送。
- 报告确切错误并停止(需用户决策)。


步骤 5:安装确定性备份脚本(无 AI / 无心跳)

在工作区外创建文件夹:
- mkdir -p "$HOME/.openclaw/gitclaw"

精确创建以下脚本:

路径:
- $HOME/.openclaw/gitclaw/auto_backup.sh

内容:

#!/usr/bin/env bash
set -euo pipefail

# GitClaw 确定性备份(无 AI)
export PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:$PATH"

WORKSPACE_DIR="${HOME}/.openclaw/workspace"
STATE_DIR="${HOME}/.openclaw/gitclaw"
LOG_FILE="${STATE_DIR}/backup.log"
LOCK_DIR="${STATE_DIR}/lock"

mkdir -p "${STATE_DIR}"

timestamp() { date -u '+%Y-%m-%dT%H:%M:%SZ'; }

# 简单锁,防止并发运行
if ! mkdir "${LOCK_DIR}" 2>/dev/null; then
  echo "$(timestamp) Skip: already running." >> "${LOG_FILE}"
  exit 0
fi
trap 'rmdir "${LOCK_DIR}" >/dev/null 2>&1 || true' EXIT

if ! command -v git >/dev/null 2>&1; then
  echo "$(timestamp) ERROR: git not found on PATH. Install git first." >> "${LOG_FILE}"
  exit 2
fi

if [ ! -d "${WORKSPACE_DIR}/.git" ]; then
  echo "$(timestamp) ERROR: ${WORKSPACE_DIR} is not a git repo. Run GitClaw setup first." >> "${LOG_FILE}"
  exit 3
fi

cd "${WORKSPACE_DIR}"

# 暂存所有更改
git add -A

# 若无暂存内容,静默退出
if git diff --cached --quiet; then
  echo "$(timestamp) No changes." >> "${LOG_FILE}"
  exit 0
fi

# 提交 + 推送
git commit -m "gitclaw backup: $(timestamp)" >> "${LOG_FILE}" 2>&1
git push origin main >> "${LOG_FILE}" 2>&1

echo "$(timestamp) Backup OK." >> "${LOG_FILE}"

将脚本写入:
- $HOME/.openclaw/gitclaw/auto_backup.sh

然后:
- chmod +x "$HOME/.openclaw/gitclaw/auto_backup.sh"


步骤 6:配置 crontab(幂等操作)

默认计划:每小时(0 * * * *)。若用户提供了不同频率,将其转换为 cron 表达式。

  1. 定义:
    - CRON_CMD="$HOME/.openclaw/gitclaw/auto_backup.sh"
    - CRON_LINE="0 * * * * $CRON_CMD"

  2. 安装(避免重复):
    - crontab -l 2>/dev/null | grep -F "$CRON_CMD" >/dev/null
    - 若未找到,追加:
    - (crontab -l 2>/dev/null; echo "$CRON_LINE") | crontab -

  3. 确认:
    - crontab -l | grep -F "$CRON_CMD"


步骤 7:最终验证

  1. 运行一次:
    - $HOME/.openclaw/gitclaw/auto_backup.sh

  2. 显示日志:
    - tail -n 50 "$HOME/.openclaw/gitclaw/backup.log" || true

  3. 告知用户:
    - 仓库:https://github.com/$OWNER/$REPO
    - 计划:每小时(或所选频率)
    - 脚本路径:~/.openclaw/gitclaw/auto_backup.sh

19 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 67 ms
Developed with Cursor