高级功能
探索 vsync 中的高级功能和优化技术。
Symlink 支持 (v1.2+)
vsync 可以为 Skills 目录使用符号链接而不是复制文件,提供即时更新和显著的磁盘空间节省。
Symlinks 如何工作
启用 symlinks 时:
- 源工具 Skills 目录保持不变
- 目标工具获得指向源的符号链接
- 源中的更改立即在所有目标中可见
- 无文件复制 = 节省磁盘空间
~/.claude/skills/my-skill/ (源 - 实际文件)
↑
├── 来自 ~/.cursor/skills/my-skill/ 的符号链接
├── 来自 ~/.opencode/skills/my-skill/ 的符号链接
└── 来自 ~/.codex/skills/my-skill/ 的符号链接启用 Symlinks
在首次同步期间
在首次 vsync sync 时,您会收到提示:
? 您想如何同步 Skills?
❯ 使用符号链接(推荐 - 即时更新,节省空间)
复制文件(传统 - 独立副本)您的选择将保存在 .vsync.json 中。
手动配置
编辑 .vsync.json:
{
"use_symlinks_for_skills": true
}优势
✅ 即时更新:在源中编辑一次,更改随处可见 ✅ 磁盘空间:一个副本而不是 N+1 个副本 ✅ 性能:更快的同步操作(无文件复制) ✅ 简洁性:单一配置源变成实际意义上的
限制
⚠️ 平台支持:需要操作系统支持符号链接(适用于 macOS、Linux、Windows 10+) ⚠️ 仅 Skills:目前仅 Skills 支持符号链接(MCP、Agents、Commands 仍然复制) ⚠️ 权限问题:在某些系统上可能需要管理员权限
在模式之间切换
您可以随时更改设置:
# 1. 编辑配置
vim .vsync.json
# 将 "use_symlinks_for_skills" 更改为 true/false
# 2. 重新同步以应用
vsync syncvsync 将自动处理转换,将符号链接替换为副本或反之亦然。
性能优化
vsync 针对速度和效率进行了优化。
基于哈希的变更检测
使用 SHA256 哈希值检测更改:
- 快速:无需比较文件内容
- 准确:即使是微小的更改也能被检测到
- 高效:自动跳过未更改的配置
// Manifest 跟踪哈希值
{
"items": {
"skill/my-skill": {
"hash": "abc123...",
"targets": {
"cursor": "abc123..."
}
}
}
}并行操作
多个目标并行同步:
源读取 (1s)
↓
差异计算 (0.2s)
↓
写入到 cursor (0.5s) ─┐
写入到 opencode (0.5s) ├─ 并行 (总共 0.5s)
写入到 codex (0.5s) ─┘
↓
总计: ~1.7s 而不是 2.7s智能缓存
manifest 充当缓存:
- 跳过具有匹配哈希值的文件
- 避免冗余的 I/O 操作
- 增量同步几乎是即时的
原子写入
所有写入都使用原子操作:
- 写入临时文件
- fsync 到磁盘
- 原子重命名
结果:防崩溃,无部分写入
多语言 CLI (v1.2+)
vsync 支持英文和中文界面。
设置语言
User 层级(全局)
编辑 ~/.vsync.json:
{
"language": "en" // 或 "zh"
}环境变量
export VIBE_SYNC_LANG=zh
vsync sync支持的语言
en- English(默认)zh- 简体中文
输出示例
English:
📖 Reading source (claude-code)...
✓ Found 3 skills
✓ Found 2 MCP servers中文:
📖 正在读取源配置 (claude-code)...
✓ 找到 3 个技能
✓ 找到 2 个 MCP 服务器高级同步模式
选择性同步
仅同步特定配置类型:
{
"sync_config": {
"skills": true,
"mcp": false, // 不同步 MCP
"agents": true,
"commands": false // 不同步 Commands
}
}多源策略
对于复杂设置,使用多个配置:
# 项目有自己的配置
cd ~/my-project
vsync sync
# 用户有全局配置
vsync sync --user两个层级可以共存——项目配置不会覆盖用户配置。
临时源切换
需要临时从不同工具导入?
# 1. 从 Cursor 导入到当前源
vsync import /path/to/cursor/project
# 2. 同步到目标
vsync sync您的源工具保持不变;您只是导入新项目。
环境变量管理
最佳实践
-
从不硬编码密钥:
// ✅ 好的 { "API_KEY": "${API_KEY}" } // ❌ 不好 { "API_KEY": "sk-abc123" } -
为本地开发使用默认值:
{ "DATABASE_URL": "${DATABASE_URL:-postgresql://localhost/dev}" } -
记录所需变量:
// 在您的 README.md 中 // 所需的环境变量: // - API_KEY: 您的 API 密钥 // - DATABASE_URL: 数据库连接字符串
跨工具变量语法
vsync 自动在工具之间转换:
| 源 (Claude Code) | 目标 (Cursor) | 目标 (OpenCode) |
|---|---|---|
${VAR} | ${env:VAR} | {env:VAR} |
${VAR:-default} | ${env:VAR} (默认值丢失) | {env:VAR} (默认值丢失) |
注意:默认值仅在 Claude Code 格式中保留。
回滚和安全
自动回滚
如果同步期间发生任何错误:
- 所有更改都会自动回滚
- 从备份恢复原始配置
- 无部分同步状态
✓ 已创建备份: cursor/mcp.json
✓ 已创建备份: opencode/opencode.json
❌ 写入 opencode 时出错
⚠️ 回滚所有更改...
✅ 回滚完成 - 所有文件已恢复手动回滚
如果您需要撤销同步:
- 使用版本控制(如果配置已提交)
- 使用系统备份(Time Machine 等)
- 使用以前的源状态重新运行
sync
CI/CD 集成
GitHub Actions
name: Sync AI Tool Configs
on:
push:
paths:
- '.claude/**'
- '.vsync.json'
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Sync configs
run: npx @nicepkg/vsync sync --yes
env:
# 添加任何所需的环境变量
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Pre-commit Hook
提交前自动同步:
#!/bin/bash
# .git/hooks/pre-commit
# 检查 .vsync.json 是否存在
if [ -f .vsync.json ]; then
echo "Running vsync..."
npx @nicepkg/vsync sync --yes
# 将同步的文件添加到提交
git add .cursor/ .opencode/ .codex/
fiWatch 模式(v1.3 计划中)
计划中的文件更改自动同步功能:
# 当源配置更改时自动同步
vsync watch这将监控源目录并自动触发同步。
调试
启用调试日志
设置环境变量:
export VIBE_SYNC_DEBUG=1
vsync sync详细输出
vsync sync --verbose检查 Manifest
检查 manifest 以查看同步状态:
cat .vsync-cache/manifest.json | jq性能提示
- 使用 Symlinks:对 Skills 显著更快
- 提交 Manifest:有助于增量同步
- 选择性同步:仅同步您需要的
- 后台运行:使用
--yes标志进行自动化
高级配置示例
混合同步策略
{
"sync_config": {
"skills": true, // 完全同步
"mcp": true, // 完全同步
"agents": false, // 跳过(手动管理)
"commands": false // 跳过(手动管理)
},
"use_symlinks_for_skills": true
}多工具开发
# 项目使用 Claude Code + Cursor
cd ~/project-a
cat .vsync.json
{
"source_tool": "claude-code",
"target_tools": ["cursor"]
}
# 另一个项目使用 Cursor + OpenCode
cd ~/project-b
cat .vsync.json
{
"source_tool": "cursor",
"target_tools": ["opencode"]
}