git-sync 是 blake-os:git-ops 路由器的内部同步步骤,用途是让本地分支与 origin 保持同步。
何时运行:路由器收到“获取最新”的请求时;在 git-commit 之后作为完整备份流程的整合步骤(要求工作区干净,因此路由器会先提交);仅当用户明确请求“git pull”或“git sync”时可直接运行。
工作流程分四步:
- 校验仓库与远端,使用 git rev-parse --is-inside-work-tree、git remote get-url origin、git branch --show-current;非 git 仓库或无 origin 则停止,不自行编造远端。
- 抓取并测量状态:git fetch origin;git rev-list --left-right --count @{u}...HEAD 输出落后与领先的提交数;git status --porcelain 检查工作区是否脏。fetch 失败则原样报告错误并停止。若 @{u} 报错说明没有上游,应先用 git-push 发布分支。
- 按测量结果处理:落后为 0 且领先为 0 表示已最新;领先大于 0 提示有未推送提交,应运行 git-push;仅落后时执行 git pull --ff-only 快进,若因工作区脏而失败则停止并列出阻塞文件,不 stash;双方均有提交时要求工作区干净,再用 git pull --no-rebase --no-edit 合并,冲突则立即 git merge --abort 并列出冲突文件交人工处理,绝不自动改文件解冲突。
- 确认:再次运行 git rev-list --left-right --count @{u}...HEAD 与 git status --short --branch,报告分支、同步后的落后/领先数、是否产生合并提交及工作区状态。
限制与护栏:合并是唯一整合方式,绝不 rebase、不 git reset --hard、不强制推送;绝不自动解决冲突;除用户明确要求外不 stash;不创建功能分支。操作顺序由 blake-os:git-ops 统一管理。