🛠️ データSync
Claude Codeの重要な設定(スキル、フック
📺 まず動画で見る(YouTube)
▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗
※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。
📜 元の英語説明(参考)
重要数据同步工具。通过云服务器中转站在多台电脑间同步 Claude Code 关键配置(skills、hooks、记忆库、skill-factory),GitHub 作为大版本归档。支持 init/pull/push/backup/status 五个子命令。
🇯🇵 日本人クリエイター向け解説
Claude Codeの重要な設定(スキル、フック
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o data-sync.zip https://jpskill.com/download/4706.zip && unzip -o data-sync.zip && rm data-sync.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/4706.zip -OutFile "$d\data-sync.zip"; Expand-Archive "$d\data-sync.zip" -DestinationPath $d -Force; ri "$d\data-sync.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
data-sync.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
data-syncフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
💬 こう話しかけるだけ — サンプルプロンプト
- › Data Sync を使って、最小構成のサンプルコードを示して
- › Data Sync の主な使い方と注意点を教えて
- › Data Sync を既存プロジェクトに組み込む方法を教えて
これをClaude Code に貼るだけで、このSkillが自動発動します。
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
[Skill 名] data-sync
重要データ同期 Skill(data-sync)
クラウドサーバーの bare repo を中継することで、複数台のコンピューター間で Claude Code の主要なデータ資産を増分同期します。GitHub はメジャーバージョンのアーカイブバックアップとして使用します。
アーキテクチャ
コンピューターA ←──(pull/push)──→ サーバー relay (最新かつ完全) ←──(pull/push)──→ コンピューターB
│
(backup: メジャーバージョンアーカイブ)
↓
GitHub (プライベートリポジトリ)
- サーバーは唯一の中間ノードです——2台のコンピューターは直接通信せず、すべての同期はサーバーを経由します。
- GitHub はアーカイブ層です——日常の同期には関与せず、メジャーバージョン時にのみプッシュを受け取ります。
- ローカルデータは常に安全です——すべての操作は追加のみで削除は行わず、破壊的な git コマンドは一切使用しません。
設定
リポジトリレジストリとサーバー情報は独立したファイルに保存されており、リポジトリの追加/変更のためにこの SKILL.md を編集する必要はありません。
設定ファイル:sync-registry.md(このファイルと同じディレクトリ)
読み取り方法:実行前に sync-registry.md を読み込み、リポジトリリストとサーバー情報を解析します。設定ファイルが存在しないか、フォーマットが異常な場合は、エラーを報告し、ユーザーに確認を促します。
使用トリガーワード
ユーザーが以下のいずれかのトリガーワードを言うと、この skill が起動します。
/data-sync- "同期データ" / "プル同期" / "プッシュ同期" / "データバックアップ" / "同期ステータス"
サブコマンドルーティング
起動後、まずユーザーの意図を判断し、対応するサブコマンドにルーティングします。
ユーザーリクエスト
│
├─ "init" / "初期化" / "新コンピューター設定"
│ → Init サブコマンド(新コンピューターの初回設定)
│
├─ "pull" / "プル" / "ローカルに同期" / 未指定(デフォルト)
│ → Pull サブコマンド
│
├─ "push" / "プッシュ" / "アップロード"
│ → Push サブコマンド
│
├─ "backup" / "アーカイブ" / "メジャーバージョン" / "GitHubにプッシュ"
│ → Backup サブコマンド
│
└─ "status" / "ステータス" / "チェック"
→ Status サブコマンド
ユーザーの意図が不明確な場合は、サブコマンドメニューを表示してユーザーに選択させます。
サブコマンドゼロ:Init(新コンピューターの初期化)
シナリオ:新コンピューターを初めて使用する際に、サーバーからすべてのリポジトリをクローンし、環境を設定する必要があります。
実行フロー
ステップ 1:前提条件の確認
# git がインストールされているか確認
git --version
# SSH 接続の確認
ssh -o ConnectTimeout=5 root@<サーバーIP> "echo ok"
- git がインストールされていない場合は、インストール方法を提示します。
- SSH 接続が失敗した場合は、ユーザーに SSH キーの設定を案内します。
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 # その後、公開鍵を手動でサーバーの ~/.ssh/authorized_keys に追加 # または、古いコンピューターから既存の鍵ペアを scp でコピー
ステップ 2:ローカルパスの問い合わせ
ユーザーに2つのパスを尋ねます。
.claude設定ディレクトリ(デフォルトは~/.claude、通常変更不要)- 学習作業リポジトリディレクトリ(ユーザーがプロジェクトのルートパスを指定)
ステップ 3:リポジトリのクローン
sync-registry.md のリポジトリリストに従って、1つずつクローンします。
git clone root@<サーバーIP>:/root/git-relay/claude-config.git <.claudeパス>
git clone root@<サーバーIP>:/root/git-relay/claude-knowledge-base.git <学習作業リポジトリパス>
各クローン完了後に検証します。
git -C <パス> log -1 --format="%h %s (%ci)"
ステップ 4:リモートのリネーム
クローンはデフォルトで origin リモートを作成するため、relay にリネームします(skill の仕様に合わせるため)。
git -C <パス> remote rename origin relay
ステップ 5:パスの適応
自動的に検出して、変更が必要な絶対パスを提示します。
<.claudeパス>/CLAUDE.mdを読み込み、その中のすべてのハードコードされたパスをリストアップします。- ユーザーに古いパスを新しいコンピューターの実際のパスに置き換えるよう促します。
settings.jsonのプロキシポートが更新する必要があるか確認します。
ステップ 6:検証
各リポジトリに対してステータスチェックを実行し、すべてが正常であることを確認します。
git -C <パス> remote -v # relay リモートの確認
git -C <パス> log -1 --oneline # 内容があることの確認
git -C <パス> status --short # クリーンな状態の確認
ステップ 7:Init レポートの生成
=== Data Sync Init レポート ===
環境:
Git: v2.43.7
SSH: root@129.211.0.193 接続正常
リポジトリ:
claude-config:
パス: C:\Users\新ユーザー\.claude
Remote: relay → 129.211.0.193:/root/git-relay/claude-config.git
最新コミット: 6955b12 "migration: full state backup" (2026-02-23)
状態: 準備完了
knowledge-base:
パス: D:\プロジェクト\VScode補助作業学習
Remote: relay → 129.211.0.193:/root/git-relay/claude-knowledge-base.git
最新コミット: 857b757 "migration: full knowledge base backup" (2026-02-23)
状態: 準備完了
ToDo:
→ CLAUDE.md のパス参照が正しいか確認してください
→ settings.json のプロキシポートを確認してください
初期化が完了しました。/data-sync pull と push を開始できます。
サブコマンド一:Pull(プル同期)
シナリオ:別のコンピューターに切り替えて作業を開始する前に、最新のコンテンツをプルします。
実行フロー
ステップ 1:環境検出
sync-registry.md の各リポジトリに対して:
- ローカルパスが存在するか確認します(存在しない場合 → ユーザーに
initを先に実行するよう促します)。 relayリモート設定があるか確認します(ない場合 → エラーを報告し、設定コマンドを提示します)。- サーバーへの SSH 接続が正常か確認します(失敗した場合 → 「エラー処理」セクションを参照)。
- 異常がある場合は、報告し、ユーザーに続行するかどうかを尋ねます。
ステップ 2:ローカルステータスの確認
各リポジトリに対して実行します。
git -C <ローカルパス> status --short
- 未コミットのローカル変更がある場合、ユーザーに警告し、オプションを提供します。
- (a) まず Push サブコマンドを実行してローカル変更をコミットする(推奨)
- (b)
git stashで一時的に保存してからプルし、プル完了後にgit stash popを実行する - (c) 警告を無視して直接プルする(競合が発生する可能性あり)
ステップ 3:まず更新があるか確認
git -C <ローカルパス> fetch relay <ブランチ>
git -C <ローカルパス> log HEAD..relay/<ブランチ> --oneline
- 新しいコミットがない場合、「すでに最新」と報告してスキップします。
- 新しいコミットがある場合、変更の概要を表示してから続行します。
ステップ 4:プルの実行
git -C <ローカルパス> pull relay <ブランチ> --ff-only
--ff-onlyを使用して、意図しないマージ競合を防ぎます。- fast-forward が失敗した場合(分岐がある場合)、ユーザーに報告し、オプションを提供します。
- (a)
git pull relay <ブランチ> --rebase(推奨、線形履歴を維持) - (b)
git pull relay <ブランチ>(マージコミットを許可) - (c) このリポジトリをスキップする
- (a)
ステップ 5:レポートの生成
=== Data Sync Pull レポート ===
claude-config:
状態: 更新済み
更新: 3 files changed (+45, -12)
最新コミット: abc1234 "sync: skillイテレーション" (2026-02-23)
knowledge-base:
状態: すでに最新(更新なし)
次のステップの提案: ローカルは最新に同期されました。作業を開始できます。作業完了後、/data-sync push を実行してください。
サブコマンド二:Push(プッシュ同期 + バージョン比較)
シナリオ:現在のコンピューターでの作業完了後、変更をサーバーにプッシュします。
実行フロー
ステップ 1:変更の検出
各リポジトリに対して実行します。
git -C <ローカルパス> status --short
git -C <ローカルパス> diff --stat
- すべての変更、追加、削除されたファイルをリストアップします。
- 変更がない場合、そのリポジトリをスキップし、「変更なし」と報告します。
ステップ 2:サーバーが先行しているか確認
git -C <ローカルパス> fetch relay <ブランチ>
git -C <ローカルパス> log HEAD..relay/<ブランチ> --oneline
- サーバーにローカルにはないコミットがある場合(別のコンピューターからプッシュされた場合)、プッシュを中止します。
「サーバーに更新があります(別のコンピューターからのもの)。まず /data-sync pull を実行してからプッシュしてください。」
- これは「まずプルしてからプッシュ」というルールの強制実行です。
ステップ 3:変更の概要を表示
claude-config の変更:
変更: skills/ai-auto-dev/skill.md
追加: skills/data-sync/SKILL.md
合計 2 ファイル
knowledge-base の変更:
変更: Claude Code補助学習記憶庫.md
変更: 思維蒸留.md
合計 2 ファイル
ステップ 4:セキュリティチェック
変更ファイルをスキャンし、以下の項目をチェックします。
| チェック項目 | レベル | 処理 |
|---|---|---|
ファイル内容が (api_key\|token\|password\|secret)\s*[:=] に一致 |
阻止 | 確認または除外するまで続行不可 |
.env ファイルが staged されている |
阻止 | .gitignore に追加するよう促す |
| 単一ファイルが 5MB を超える | 警告 | ファイル名とサイズを表示し、ユーザーに確認を求める |
node_modules/ が staged されている |
阻止 | .gitignore にルールが欠落していないか確認 |
.gitignore が一般的な一時ファイルを除外していない |
警告 | ルールの追加を推奨 |
ステップ 5:コミットとプッシュ
ユーザーが確認した後、変更のある各リポジトリに対して実行します。
git -C <ローカルパス> add -A
git -C <ローカルパス> commit -m "sync: <自動生成された変更概要>"
git -C <ローカルパス> push relay <ブランチ>
コミットメッセージのフォーマット:sync: <日付> <変更ファイル数>個のファイル (<主要な変更の簡潔な説明>)
例:sync: 2026-02-23 4 files (skillイテレーション+記憶庫更新)
ステップ 6:GitHub のメジャーバージョンとの比較
プッシュ完了後、現在の状態と GitHub の最新タグとの差を自動的に比較します。
# 最新のタグを取得
git -C <ローカルパス> describe --tags --abbrev=0 2>/dev/null
# タグがある場合、差を統計
git -C <ローカルパス> log <最新タグ>..HEAD --oneline
git -C <ローカルパス> diff --stat <最新タグ>..HEAD
バージョン比較判定ロジック:
最新タグを取得
│
├─ タグなし
│ → 提示: 「まだメジャーバージョンアーカイブがありません。/data-sync backup を実行して v1.0 を打つことをお勧めします。」
│
├─ 前回タグ以降 < 5 コミット かつ < 10 ファイル変更
│ → 提示: 「変更が少ないため、現時点ではアーカイブは不要です。」
│
├─ 前回タグ以降 5-15 コミット または 10-20 ファイル変更
│ → 提示: 「変更が中程度です。アーカイブを検討してもよいでしょう。」
│
└─ 前回タグ以降 > 15 コミット または > 20 ファイル変更
→ 強く推奨: 「変更が多いため、早急に /data-sync backup を実行することをお勧めします。」
ステップ 7:プッシュレポートの生成
=== Data Sync Push レポート ===
claude-config:
コミット: abc1234 "sync: 2026-02-23 2 files (data-sync skillを追加)"
プッシュ: relay/master 成功
転送量: ~15 KB (増分)
前回メジャーバージョンからの差: +8 commits, 15 files changed → アーカイブを推奨
knowledge-base:
コミット: def5678 "sync: 2026-02-23 2 files (記憶庫+蒸留更新)"
プッシュ: relay/master 成功
転送量: ~3 KB (増分)
前回メジャーバージョンからの差: 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
重要数据同步 Skill(data-sync)
通过云服务器 bare repo 中转,在多台电脑之间增量同步 Claude Code 的关键数据资产,GitHub 作为大版本归档备份。
架构
电脑A ←──(pull/push)──→ 服务器 relay (最新最全) ←──(pull/push)──→ 电脑B
│
(backup: 大版本归档)
↓
GitHub (私有仓库)
- 服务器是唯一中间节点——两台电脑不直接通信,所有同步经过服务器
- GitHub 是归档层——不参与日常同步,只在大版本时接收推送
- 本机数据永远安全——所有操作只增不删,不使用任何破坏性 git 命令
配置
仓库注册表和服务器信息存放在独立文件中,添加/修改仓库无需编辑本 SKILL.md:
配置文件:sync-registry.md(与本文件同目录)
读取方式:执行前先读取 sync-registry.md,解析仓库列表和服务器信息。如果配置文件不存在或格式异常,报错并提示用户检查。
使用触发词
用户说以下任一触发词时启动本 skill:
/data-sync- "同步数据" / "拉取同步" / "推送同步" / "数据备份" / "同步状态"
子命令路由
启动后,首先判断用户意图,路由到对应子命令:
用户请求进来
│
├─ "init" / "初始化" / "新电脑配置"
│ → Init 子命令(新电脑首次配置)
│
├─ "pull" / "拉取" / "同步到本机" / 未指定(默认)
│ → Pull 子命令
│
├─ "push" / "推送" / "上传"
│ → Push 子命令
│
├─ "backup" / "归档" / "大版本" / "推到GitHub"
│ → Backup 子命令
│
└─ "status" / "状态" / "检查"
→ Status 子命令
如果用户意图不明确,展示子命令菜单让用户选择。
子命令零:Init(新电脑初始化)
场景:新电脑首次使用,需要从服务器克隆全部仓库并配置环境。
执行流程
步骤 1:检查前置条件
# 检查 git 是否安装
git --version
# 检查 SSH 连接
ssh -o ConnectTimeout=5 root@<服务器IP> "echo ok"
- 如果 git 未安装,提示安装方法
- 如果 SSH 连接失败,引导用户配置 SSH 密钥:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 # 然后手动将公钥添加到服务器 ~/.ssh/authorized_keys # 或从旧电脑上 scp 已有密钥对
步骤 2:询问本机路径
询问用户两个路径:
.claude配置目录(默认~/.claude,通常不需要改)- 学习工作库目录(用户指定项目根路径)
步骤 3:克隆仓库
按 sync-registry.md 中的仓库列表逐个克隆:
git clone root@<服务器IP>:/root/git-relay/claude-config.git <.claude路径>
git clone root@<服务器IP>:/root/git-relay/claude-knowledge-base.git <学习工作库路径>
每个克隆完成后验证:
git -C <路径> log -1 --format="%h %s (%ci)"
步骤 4:重命名 remote
克隆默认创建 origin remote,重命名为 relay(与 skill 规范一致):
git -C <路径> remote rename origin relay
步骤 5:路径适配
自动检测并提示需要修改的绝对路径:
- 读取
<.claude路径>/CLAUDE.md,列出其中所有硬编码路径 - 提示用户将旧路径替换为新电脑的实际路径
- 检查
settings.json中的代理端口是否需要更新
步骤 6:验证
对每个仓库执行 status 检查,确认一切正常:
git -C <路径> remote -v # 确认 relay remote
git -C <路径> log -1 --oneline # 确认有内容
git -C <路径> status --short # 确认干净状态
步骤 7:生成 Init 报告
=== Data Sync Init 报告 ===
环境:
Git: v2.43.7
SSH: root@129.211.0.193 连接正常
仓库:
claude-config:
路径: C:\Users\新用户\.claude
Remote: relay → 129.211.0.193:/root/git-relay/claude-config.git
最新提交: 6955b12 "migration: full state backup" (2026-02-23)
状态: 就绪
knowledge-base:
路径: D:\项目\VScode辅助工作学习
Remote: relay → 129.211.0.193:/root/git-relay/claude-knowledge-base.git
最新提交: 857b757 "migration: full knowledge base backup" (2026-02-23)
状态: 就绪
待办:
→ 请检查 CLAUDE.md 中的路径引用是否正确
→ 请确认 settings.json 中的代理端口
初始化完成。可以开始使用 /data-sync pull 和 push 了。
子命令一:Pull(拉取同步)
场景:切换到另一台电脑开始工作前,拉取最新内容。
执行流程
步骤 1:环境检测
对 sync-registry.md 中的每个仓库:
- 检查本机路径是否存在(不存在 → 提示用户先执行
init) - 检查是否有
relayremote 配置(没有 → 报错并提示配置命令) - 检查 SSH 连接到服务器是否正常(失败 → 见"错误处理"章节)
- 如有异常,报告并询问用户是否继续
步骤 2:检查本地状态
对每个仓库执行:
git -C <本机路径> status --short
- 如果有未提交的本地修改,警告用户并提供选项:
- (a) 先执行 Push 子命令提交本地修改(推荐)
- (b)
git stash暂存后再 pull,pull 完后git stash pop - (c) 忽略警告,直接 pull(可能产生冲突)
步骤 3:先检查是否有更新
git -C <本机路径> fetch relay <分支>
git -C <本机路径> log HEAD..relay/<分支> --oneline
- 如果没有新提交,报告"已是最新"并跳过
- 如果有新提交,展示变更概览后继续
步骤 4:执行拉取
git -C <本机路径> pull relay <分支> --ff-only
- 使用
--ff-only防止意外合并冲突 - 如果 fast-forward 失败(有分叉),报告给用户并提供选项:
- (a)
git pull relay <分支> --rebase(推荐,保持线性历史) - (b)
git pull relay <分支>(允许合并提交) - (c) 跳过此仓库
- (a)
步骤 5:生成报告
=== Data Sync Pull 报告 ===
claude-config:
状态: 已更新
更新: 3 files changed (+45, -12)
最新提交: abc1234 "sync: skill迭代" (2026-02-23)
knowledge-base:
状态: 已是最新(无更新)
建议下一步: 本机已同步到最新,可以开始工作。工作完毕后执行 /data-sync push。
子命令二:Push(推送同步 + 版本对比)
场景:在当前电脑完成工作后,推送变更到服务器。
执行流程
步骤 1:检测变更
对每个仓库执行:
git -C <本机路径> status --short
git -C <本机路径> diff --stat
- 列出所有修改、新增、删除的文件
- 如果没有变更,跳过该仓库并报告"无变更"
步骤 2:检查服务器是否领先
git -C <本机路径> fetch relay <分支>
git -C <本机路径> log HEAD..relay/<分支> --oneline
- 如果服务器有本机没有的提交(另一台电脑推过),中止 push:
"服务器有更新(来自另一台电脑),请先执行 /data-sync pull 再 push。"
- 这是"先 pull 后 push"规则的强制执行
步骤 3:展示变更摘要
claude-config 变更:
修改: skills/ai-auto-dev/skill.md
新增: skills/data-sync/SKILL.md
共 2 个文件
knowledge-base 变更:
修改: Claude Code辅助学习记忆库.md
修改: 思维蒸馏.md
共 2 个文件
步骤 4:安全检查
扫描变更文件,检查以下项目:
| 检查项 | 级别 | 处理 |
|---|---|---|
文件内容匹配 (api_key\|token\|password\|secret)\s*[:=] |
阻断 | 必须确认或排除后才能继续 |
.env 文件被 staged |
阻断 | 提示加入 .gitignore |
| 单个文件 > 5MB | 警告 | 展示文件名和大小,用户确认 |
node_modules/ 被 staged |
阻断 | 检查 .gitignore 是否缺失规则 |
.gitignore 没有排除常见临时文件 |
警告 | 建议添加规则 |
步骤 5:提交并推送
用户确认后,对每个有变更的仓库执行:
git -C <本机路径> add -A
git -C <本机路径> commit -m "sync: <自动生成的变更摘要>"
git -C <本机路径> push relay <分支>
Commit message 格式:sync: <日期> <变更文件数>个文件 (<主要变更简述>)
示例:sync: 2026-02-23 4 files (skill迭代+记忆库更新)
步骤 6:与 GitHub 大版本对比
推送完成后,自动对比当前状态与 GitHub 最近 tag 之间的差距:
# 获取最近的 tag
git -C <本机路径> describe --tags --abbrev=0 2>/dev/null
# 如果有 tag,统计差距
git -C <本机路径> log <最近tag>..HEAD --oneline
git -C <本机路径> diff --stat <最近tag>..HEAD
版本对比判定逻辑:
获取最近 tag
│
├─ 无 tag
│ → 提示: "尚无大版本归档,建议执行 /data-sync backup 打 v1.0"
│
├─ 自上次 tag 以来 < 5 commits 且 < 10 files changed
│ → 提示: "变更较少,暂不需要归档"
│
├─ 自上次 tag 以来 5-15 commits 或 10-20 files changed
│ → 提示: "变更适中,可考虑归档"
│
└─ 自上次 tag 以来 > 15 commits 或 > 20 files changed
→ 强烈建议: "变更较多,建议尽快执行 /data-sync backup"
步骤 7:生成推送报告
=== Data Sync Push 报告 ===
claude-config:
提交: abc1234 "sync: 2026-02-23 2 files (新增data-sync skill)"
推送: relay/master 成功
传输量: ~15 KB (增量)
距上次大版本: +8 commits, 15 files changed → 建议归档
knowledge-base:
提交: def5678 "sync: 2026-02-23 2 files (记忆库+蒸馏更新)"
推送: relay/master 成功
传输量: ~3 KB (增量)
距上次大版本: 无 tag → 建议打 v1.0
建议下一步:
→ 两个仓库都有较多未归档变更,建议执行 /data-sync backup
→ 或继续工作,下次再归档
子命令三:Backup(大版本归档到 GitHub)
场景:累积了较多变更,或达到里程碑,需要完整归档到 GitHub。
执行流程
步骤 1:确认归档范围
展示各仓库自上次 tag 以来的完整变更:
# 每个仓库
git -C <本机路径> describe --tags --abbrev=0 2>/dev/null
git -C <本机路径> log <最近tag>..HEAD --oneline # 或 git log --oneline(无tag时)
git -C <本机路径> diff --stat <最近tag>..HEAD
询问用户:
- 归档哪些仓库(全部 / 选择性)
- 版本号(自动建议下一个版本号,用户可修改)
- 版本说明(一句话概括本次归档的主要内容)
版本号自动建议逻辑:
获取最近 tag
│
├─ 无 tag → 建议 v1.0
├─ 最近 tag 是 vX.Y
│ ├─ 有新增 skill 或重大模块 → 建议 vX.(Y+1)
│ └─ 仅小改 → 建议 vX.(Y+1)
└─ 用户可手动指定任意版本号
步骤 2:确保 relay 是最新的
归档前先同步到服务器:
git -C <本机路径> push relay <分支>
步骤 3:打 Tag
git -C <本机路径> tag -a <版本号> -m "<版本说明>"
git -C <本机路径> push relay <分支> --tags
Tag 命名规范:v<主版本>.<次版本>
- 新增重要内容(新 skill、新蒸馏主题)→ 次版本 +1
- 架构大调整 → 主版本 +1
步骤 4:推送到 GitHub(自动选择路径)
检测 GitHub 连通性
│
├─ 本机能连 GitHub(curl --max-time 5 https://api.github.com)
│ → 路径 A:本机直推
│ git -C <本机路径> push origin <分支> --tags
│ (如果没有 origin remote,自动添加)
│
└─ 本机不能连 GitHub(超时或拒绝)
→ 路径 B:服务器中转推
ssh root@<服务器IP> "cd /root/git-relay/<仓库>.git && git push github --mirror"
│
├─ 成功 → 继续
└─ 失败(服务器未配置 GitHub credential)
→ 引导配置:
ssh root@<服务器IP>
cd /root/git-relay/<仓库>.git
git remote set-url github https://<token>@github.com/mwangxiang/<仓库>.git
# 或配置 credential helper
服务器端 GitHub Credential 配置说明:
首次通过服务器中转推送 GitHub 时,需要在服务器上配置认证:
# 方式一:URL 内嵌 token(简单但 token 明文存储)
ssh root@<服务器IP>
cd /root/git-relay/<仓库>.git
git remote set-url github https://mwangxiang:<GitHub_PAT>@github.com/mwangxiang/<仓库>.git
# 方式二:git credential store(token 存文件,稍安全)
ssh root@<服务器IP>
git config --global credential.helper store
# 首次 push 时输入用户名和 token,之后自动记住
获取 GitHub Personal Access Token:GitHub Settings → Developer settings → Personal access tokens → 创建,勾选 repo 权限。
步骤 5:验证归档
# 路径 A 验证(本机直推后)
git -C <本机路径> ls-remote origin --tags | grep <版本号>
# 路径 B 验证(服务器中转后)
ssh root@<服务器IP> "cd /root/git-relay/<仓库>.git && git log --oneline -1 && git tag -l | tail -3"
如果有 GitHub token 可用,额外通过 API 验证:
curl -s -H "Authorization: token <token>" \
https://api.github.com/repos/mwangxiang/<仓库>/tags | head -20
步骤 6:生成归档报告
=== Data Sync Backup 报告 ===
claude-config:
版本: v1.1
Tag 说明: "新增 data-sync skill, windtunnel 更新"
推送方式: 服务器中转 (路径 B)
GitHub: mwangxiang/claude-config 验证通过
变更统计: 15 files, +320 -45 (自 v1.0)
归档大小: ~2.1 MB (git pack)
knowledge-base:
版本: v1.0
Tag 说明: "初始归档:记忆库+skill-factory+SOP"
推送方式: 服务器中转 (路径 B)
GitHub: mwangxiang/wangxiang-study-lab 验证通过
变更统计: 272 files (首次归档)
归档大小: ~8.5 MB (git pack)
归档历史:
claude-config: v1.0 (02-20) → v1.1 (02-23) [本次]
knowledge-base: v1.0 (02-23) [本次, 首次]
建议下一步: 归档完成,GitHub 已保存完整快照。下次累积较多变更后再 backup。
子命令四:Status(同步状态)
场景:快速查看各仓库在本机、服务器、GitHub 三个节点的同步状态。
执行流程
步骤 1:收集信息
对每个仓库,并行收集:
# 本机
git -C <本机路径> log -1 --format="%h %s (%ci)"
git -C <本机路径> status --short | wc -l
git -C <本机路径> describe --tags --abbrev=0 2>/dev/null
git -C <本机路径> rev-list --count HEAD 2>/dev/null
# 服务器
ssh -o ConnectTimeout=5 root@<服务器IP> \
"cd /root/git-relay/<仓库>.git && git log -1 --format='%h %s (%ci)'"
# 对比 hash
LOCAL_HASH=$(git -C <本机路径> log -1 --format="%H")
SERVER_HASH=$(ssh root@<服务器IP> "cd /root/git-relay/<仓库>.git && git log -1 --format='%H'")
步骤 2:判定同步状态
比较 LOCAL_HASH 和 SERVER_HASH
│
├─ 相同 → "已同步"
├─ 本机领先(本机有服务器没有的 commit) → "本机有未推送的变更"
├─ 服务器领先(服务器有本机没有的 commit) → "服务器有更新,需要 pull"
└─ 双方都有对方没有的 commit → "已分叉,需要手动处理"
步骤 3:展示报告
=== Data Sync Status ===
claude-config:
本机: abc1234 "sync: 更新skill" (2026-02-23 20:00)
服务器: abc1234 "sync: 更新skill" (2026-02-23 20:00)
同步状态: 已同步
未提交修改: 0 个文件
最近 tag: v1.1 (距今 3 commits)
knowledge-base:
本机: def5678 "sync: 记忆库" (2026-02-23 19:30)
服务器: aaa9999 "sync: 另一台电脑推送" (2026-02-23 21:00)
同步状态: 服务器有更新,需要 pull
未提交修改: 2 个文件
最近 tag: v1.0 (距今 5 commits)
建议下一步:
→ knowledge-base: 先 pull 最新,再处理本地修改
→ 可执行 /data-sync pull 自动处理
核心规则
1. 绝不删除本地文件
- 所有 git 操作使用安全模式(
--ff-only、不使用--force) - pull 冲突时报告给用户,不自动覆盖
- 禁止的命令:
git reset --hard、git clean -f、git checkout .、git push --force
2. 增量优先
- git 天然增量传输,日常同步通常 < 1 MB
- 不重复推送未变更的内容
.gitignore排除 node_modules、telemetry、debug 等大体积临时文件
3. 服务器是最新最全
- 两台电脑都推到服务器,服务器永远保留最完整的版本
- GitHub 只在大版本时接收推送,可以落后于服务器
4. 先 pull 后 push
- Push 前自动
fetch检查服务器是否领先 - 如果服务器有本机没有的提交,中止 push 并要求先 pull
- 避免分叉和不必要的合并提交
5. 确认后再执行
- Push 和 Backup 操作展示变更摘要后,等待用户确认
- Pull 如有本地修改,先警告用户
- 大版本 Tag 需要用户确认版本号和说明
6. 敏感信息保护
- 推送前扫描 API key、token、password(正则:
(api_key|token|password|secret)\s*[:=]) settings.json中的代理地址可以推送(不含密钥)tech-library.md(含 API key)已在.gitignore中排除- GitHub token 不写入任何 tracked 文件
错误处理
SSH 连接失败
SSH 连接服务器失败
│
├─ Connection refused(端口未开放或 sshd 未运行)
│ → 提示: "服务器 SSH 端口不可达,请检查服务器状态或防火墙规则"
│ → 如果只是暂时性故障,可以先做本地 commit,稍后再 push
│
├─ Connection timed out(网络不通)
│ → 提示: "网络连接超时,请检查网络或 VPN"
│ → 建议稍后重试
│
├─ Permission denied(密钥认证失败)
│ → 提示: "SSH 认证失败,请检查 ~/.ssh/ 密钥配置"
│ → 引导: ssh-keygen + 将公钥添加到服务器
│
└─ Host key verification failed(首次连接或 IP 变更)
→ 提示: "服务器指纹变更,如确认安全请执行:"
→ ssh-keygen -R <服务器IP>
Git Push 失败
Push 失败
│
├─ rejected (non-fast-forward)
│ → 原因: 服务器有本机没有的提交(另一台电脑推过)
│ → 处理: 先 pull 再 push(强制执行"先pull后push"规则)
│
├─ remote: Repository not found
│ → 原因: bare repo 路径错误或已被删除
│ → 处理: 检查 sync-registry.md 中的路径是否正确
│ → 恢复: ssh 到服务器确认 /root/git-relay/ 下的仓库列表
│
└─ fatal: unable to access (GitHub push)
→ 原因: GitHub 不可达或认证失败
→ 处理: 自动切换到服务器中转推送(路径 B)
Git Pull 冲突
Pull 产生冲突
│
├─ 仅 markdown 文件冲突
│ → 展示冲突内容(<<<< ==== >>>>标记),建议用户手动选择保留哪个版本
│ → markdown 冲突通常是两端同时编辑了同一段落
│ → 解决后: git add <文件> && git commit
│
├─ 配置文件冲突(settings.json、.claude/settings.local.json)
│ → 展示两个版本的差异
│ → 建议保留当前电脑的配置(配置通常是机器特定的)
│ → 保留本机版: git checkout --ours <文件> && git add <文件>
│
└─ 其他文件冲突
→ 报告冲突文件列表和冲突行数
→ 不自动解决,逐个展示差异,交给用户处理
磁盘空间不足
# Push 前检查服务器剩余空间
ssh root@<服务器IP> "df -h /root/git-relay/ | tail -1"
- 如果服务器剩余 < 500 MB,发出警告
- 如果服务器剩余 < 100 MB,阻断 push 并建议清理
网络中断恢复
如果 push 过程中网络中断:
- git push 是原子操作,中断不会破坏远端仓库
- 重新执行相同的 push 命令即可恢复
- 提示用户: "推送被中断,请检查网络后重新执行 /data-sync push"
版本标签规范
| 场景 | Tag 格式 | 示例 |
|---|---|---|
| 首次归档 | v1.0 |
v1.0 |
| 常规积累归档 | v<主>.<次+1> |
v1.1, v1.2 |
| 架构变更 / 新增重要模块 | v<主+1>.0 |
v2.0 |
| 紧急修复(可选) | v<主>.<次>-hotfix |
v1.1-hotfix |
打 tag 的时机建议:
- 累积 10+ commits 或 20+ files changed
- 新增了重要 skill
- 记忆库有重大更新
- 电脑迁移前(确保完整备份)
扩展:添加新仓库
-
在服务器上创建 bare repo:
ssh root@129.211.0.193 "cd /root/git-relay && git init --bare <新仓库名>.git" -
在本机添加 relay remote:
cd <本机项目路径> git remote add relay root@129.211.0.193:/root/git-relay/<新仓库名>.git git push relay <分支> -
在
sync-registry.md仓库列表中追加一行 -
(可选)在 GitHub 创建对应的私有仓库,在服务器 bare repo 中:
ssh root@129.211.0.193 cd /root/git-relay/<新仓库名>.git git remote add github https://github.com/mwangxiang/<仓库名>.git
与其他 Skill 的配合
- dev-log:大版本归档时,可先用
/dev-log生成详细的版本文档,再用/data-sync backup推送 - distill:蒸馏完新知识后,用
/data-sync push同步到服务器 - ai-auto-dev:Codex 完成开发后,用
/data-sync push保存成果 - skill-factory:新 skill 交付部署后,用
/data-sync push同步到所有设备
快速参考卡
/data-sync init ← 新电脑首次配置(克隆+路径适配)
/data-sync pull ← 换电脑时,拉取最新
/data-sync push ← 工作完毕,推送变更(自动对比大版本)
/data-sync backup ← 里程碑时,归档到 GitHub(打 tag)
/data-sync status ← 随时查看同步状态