概述
repo-sync 是一个用于在 workspace-hub 生态中批量管理并同步多个 Git 仓库的技能。它提供针对 26 个以上仓库的批量操作、状态监控和协调同步能力。
主要用途与使用场景
- 开始工作会话时,一次性拉取所有仓库的最新变更
- 结束一天工作时,提交并推送所有待处理的更改
- 检查哪些仓库存在未提交的更改或落后于远程
- 在多个相关仓库之间协调分支变更
- 在整个工作区生态中发布更新
主要能力
核心操作
- 状态检查:
./scripts/repository_sync status all - 拉取操作:
./scripts/repository_sync pull all - 提交操作:
./scripts/repository_sync commit all -m "Update dependencies" - 推送操作:
./scripts/repository_sync push all - 完整同步(提交+推送):
./scripts/repository_sync sync all -m "End of day sync"
状态指示
- 🟢 Clean:无变更且已是最新
- 🔴 Uncommitted:存在本地更改
- 🟣 Unpushed:存在未推送的提交
- 🔵 Behind:远程有更新
- 🟡 Not cloned:本地缺少该仓库
仓库分类
- Work 仓库:digitalmodel、energy、frontierdeepwater、aceengineer-admin、aceengineer-website 等
- Personal 仓库:个人项目、学习仓库、个人工具等
分类定义在 .gitignore 中,可通过 ./scripts/repository_sync list work、list personal、list all 查看。
分支管理
- 列出分支:
./scripts/repository_sync branches all - 获取远程分支:
./scripts/repository_sync fetch-branches all - 与 main 同步:
./scripts/repository_sync sync-main all(可用--rebase) - 切换分支:
./scripts/repository_sync switch all main
工作流示例
日常开发:
./scripts/repository_sync pull all
./scripts/repository_sync sync all -m "$(date +%Y-%m-%d) updates"
功能分支:
./scripts/repository_sync switch work feature/new-feature
./scripts/repository_sync sync-main work
./scripts/repository_sync push work
./scripts/repository_sync switch work main
发布流程:
./scripts/repository_sync switch work release/v1.2.0
./scripts/repository_sync sync work -m "Release v1.2.0 preparation"
./scripts/repository_sync switch work main
./scripts/repository_sync pull work
批量与并行
可针对指定仓库执行操作,例如 ./scripts/repository_sync sync digitalmodel energy -m "Update",也支持 --parallel 并行执行。
使用方式
前提条件:
- 已安装并配置 SSH 密钥的 Git
- 可访问 workspace-hub 中的所有仓库
./scripts/repository_sync脚本可用且可执行- 仓库 URL 已在
config/repos.conf中配置
可编辑配置:./scripts/repository_sync config;刷新仓库列表:./scripts/repository_sync refresh。
错误处理
资料提供了合并冲突、过期分支、恢复到远程状态、认证问题、网络问题、权限被拒等情形的处理命令。冲突时先查看状态,再到受影响仓库手动解决后继续同步。
Windows / Git Bash 注意事项
- 远程文件名尾随空格会阻止 checkout,可用
git config core.protectNTFS false或跳过这些文件 - 长路径:
git config --global core.longpaths true - 符号链接需要管理员权限,可用
git config core.symlinks false - 脚本必须使用 LF 而非 CRLF,可用 dos2unix 修复或设置
git config core.autocrlf input - MINGW 下根路径为 /d/ 而非 /,应使用 WORKSPACE_HUB 环境变量解析路径
- 拉取前建议先 stash,拉取后 pop,冲突时报告用户而非自动解决
- 子模块远程被 force-push 时,可用
git fetch origin && git reset --hard origin/main,不要对已分叉分支执行 rebase - 判断目录是否为子模块前先检查 .gitmodules:
git submodule status - 远程新增文件匹配本地 .gitignore 时,使用
git add -f <file>强制跟踪
限制与暂未提供
资料未说明该技能的具体安装方式(除脚本可用性要求外)、版本发布渠道、许可条款或价格信息。