← ClaudeAtlas

gl-gh-synclisted

在 GitLab(内部)和 GitHub(开源)之间双向同步代码。 自动检测哪边有新提交,fast-forward 场景直接推送,分叉场景走 PR/MR 流程。
AgentsMesh/AgentsMesh · ★ 2,147 · Code & Development · score 86
Install: claude install-skill AgentsMesh/AgentsMesh
# GL-GH-Sync —— GitLab / GitHub 双仓库同步流程 将 GitLab(origin)和 GitHub(github)的 main 分支保持同步。 **核心策略:** - **一方领先(fast-forward)**→ 直接 `git push`,零额外 commit - **两边分叉**→ 走 PR/MR 流程,需人工决策 ## 使用方式 ``` /gl-gh-sync # 自动检测方向并同步 /gl-gh-sync --status # 仅查看两边差异,不执行同步 ``` ## 同步流程 ### 第一步:获取最新状态 ```bash git fetch origin main git fetch github main # 查看两边差异 git log --oneline origin/main..github/main # GitHub 有但 GitLab 没有 git log --oneline github/main..origin/main # GitLab 有但 GitHub 没有 ``` ### 第二步:判断同步方向 ```bash GITLAB_AHEAD=$(git rev-list --count github/main..origin/main) GITHUB_AHEAD=$(git rev-list --count origin/main..github/main) echo "GitLab 领先 GitHub: $GITLAB_AHEAD 个提交" echo "GitHub 领先 GitLab: $GITHUB_AHEAD 个提交" ``` 根据结果选择策略: - **两边相同**(均为 0)→ 已同步,无需操作 - **仅 GitLab 领先**→ 直接推送到 GitHub - **仅 GitHub 领先**→ 直接推送到 GitLab - **两边都有新提交(分叉)**→ 需人工决策,询问用户 ### 第三步-A:GitLab → GitHub(直接推送) 一方严格领先时,直接推送即可保持 commit hash 完全一致,无额外 merge commit。 ```bash # 直接将 GitLab main 推送到 GitHub main(fast-forward) git push github origin/main:main ``` ### 第三步-B:GitHub → GitLab(直接推送) ```bash # 直接将 GitHub main 推送到 GitLab main(fast-forward) git push origin github/main:main ``` > **注意:** 如果 GitLab main 有 protected branch 规则阻止直接推送, > 则回退到 MR 流程(见"分叉处理"章节),但需注意 MR 合并产生的 > merge commit 需要再同步回 GitHub。 ### 第四步:验证同步结果 ```bash git fetch origin main git fetch github main DIFF=$(git rev-list origin/main...github/main --count) if [ "$DIFF" -eq 0 ]; then echo "✅ 同步成功:两边 main 分支完全一致" git log --onel