Github 和 Gitlab 同步 将 Gitlab 同步到 Github(简单) 将 Github 同步到 Gitlab(中级,除非付费) 注意事项

2025-06-04

Github 和 Gitlab 同步

将 Gitlab 同步到 Github(简单)

将 Github 同步到 Gitlab(除非付费,否则需要中级)

注意事项

Github 和 Gitlab 都是在线托管 Git 代码库的绝佳方式。它们都提供优秀的工具来管理你的项目,无论是开源项目还是私有代码。
我不会深入比较这两种服务,因为很多指南已经做过比较了。对我来说,Github 和 Gitlab 之间的主要区别在于,Gitlab 更注重为企业提供 CI/CD 流水线和工具,而 Github 更注重社区建设,致力于打造一个共享开源代码的平台。
两者都可以用于任何一种场景……这使得在它们之间做出选择变得非常困难!

但是如果我告诉你你不必选择 O_o 呢?

为什么我想同时使用 Gitlab 和 Github

简单声明一下,这是我用的方法。它对我有用,但可能不适用于所有人。我建议你亲自尝试一下,做一些测试。
我分享我的经验,是因为我觉得它对和我处境相同的人可能有用。

我喜欢把我的仓库按项目(或者 Gitlab 中的组)组织起来。可惜 Github 做不到这一点。
我还想让尽可能多的人接触到我的仓库,毕竟 Github 拥有最大的社区。
唉,我卡住了,两个平台的功能我都想要。

对我来说幸运的是,Gitlab 有两个功能可以使这两个工具之间的共生成为可能:

  1. Github 存储库导入这使得从 Github 导入存储库变得非常容易
  2. Gitlab 到 Github 的仓库同步(免费)这样我就可以同时使用 Gitlab 作为主要数据来源,以及 Github 上的仓库。我可以使用 Github 的问题跟踪器、wiki 和论坛(Github 讨论)。
  3. 很棒的 CI/CD(好吧,我说了两件事,我撒了谎)

将 Gitlab 同步到 Github(简单)

这个很简单。你可以自己设置一些 CI/CD。不过 Gitlab 会自动帮你完成。

  1. 转到“设置 > 存储库 > 镜像存储库”
  2. 输入你的 Github repo,并在前面输入你的用户名https://<github username>@github.com/path/to/your/repo.git
  3. 在密码字段中,输入您的 Github 令牌
  4. 选择推送(这需要订阅)
  5. 新闻镜像库

从现在起,对 Gitlab 的更改将镜像到 Github

将 Github 同步到 Gitlab(除非付费,否则需要中级)

有两种方法可以做到这一点(两者只是从相反的平台来看是等效的)

  1. 您可以在 Github 上设置一个 CI/CD 管道,使用 webhook(在推送和拉取请求时)触发。
  2. 你可以在 GitLab 上设置一个 CI/CD 流水线,使用 Webhook(在推送和拉取请求时)触发。原来这实际上是一个高级功能……现在如果不付费,就无法使用拉取 Webhook。

我个人选择从 Github 端执行此操作,因为 Github 方法是免费的

方法 1 Github CI/CD

  1. 在您的 Github 存储库中创建以下机密
    1. TARGET_URL值:Gitlab 仓库的 URL
    2. TARGET_TOKEN价值:Gitlab 代币
    3. TARGET_USERNAME值:Gitlab 用户名
  2. 使用以下代码为您的存储库创建一个 Github 操作:
name: GitlabSync

on:
  - push
  - delete

jobs:
  sync:
    runs-on: ubuntu-latest
    name: Git Repo Sync
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - uses: wangchucheng/git-repo-sync@v0.1.0
      with:
        # Such as https://github.com/wangchucheng/git-repo-sync.git
        target-url: ${{ secrets.TARGET_URL }}
        # Such as wangchucheng
        target-username: ${{ secrets.TARGET_USERNAME }}
          # You can store token in your project's 'Setting > Secrets' and reference the name here. Such as ${{ secrets.ACCESS\_TOKEN }}
        target-token: ${{ secrets.TARGET_TOKEN }}
Enter fullscreen mode Exit fullscreen mode
  1. 确保您在 Gitlab 中推送的分支不受保护或允许强制推送

方法 2 Gitlab CI/CD(需要 Gitlab premium)

请注意,如果您订阅了 Gitlab,您也可以通过几次点击在同一个界面中完成此操作,就像我们设置从 Gitlab 到 Github 的同步一样。

转到“设置 > 存储库 > 镜像存储库”

  1. 输入你的 Github repo,并在前面输入你的用户名https://<github username>@github.com/path/to/your/repo.git
  2. 在密码字段中,输入您的 Github 令牌
  3. 选择拉取(这需要订阅)
  4. 新闻镜像库

手动设置

设置 webhook

如果您通过 Github 导入工具创建了 Gitlab 项目,那么您可以完全跳过此步骤。

  1. 在您的 Github 存储库中,转到“设置 > Webhooks”
  2. 创建新的 webhook
    • Payload 路径:(https://gitlab.com/api/v4/projects/<gitlab project id>/mirror/pull项目 ID 可在“设置 > 常规”中找到)
    • 内容类型:application/json
    • SSL 验证:关闭
    • 仅发送:推和拉
  3. 激活

  4. 在 Gitlab 项目中,转到“设置 > Webhooks”

  5. 选择从存储库推送事件并进入 Github 存储库(如果是私有的,则需要使用令牌)

设置 CI/CD 变量

  1. 在 Gitlab 项目中,转到“设置 > CI/CD > 变量”
  2. 创建一个具有 key:ACCESS_TOKEN和 value: 的变量(由于这是敏感的,因此将其隐藏)
    1. 创建一个具有 key:REMOTE_REPOSITORY_URL和 value: 的变量<your Github token>@<your repository URL>(由于这是敏感的,因此将其隐藏)

设置 CI/CD

  1. 通过转到“CI/CD > 编辑器”或.gitlab-ci.yml在项目根目录中创建文件并添加以下内容来创建管道:
sync-with-github:
  before_script:
    - git config --global user.name "${GITLAB_USER_NAME}"
    - git config --global user.email "${GITLAB_USER_EMAIL}"
  script:
    - git remote add github $REMOTE_REPOSITORY_URL
    - git checkout master
    - git pull origin master
    - git pull github master
    - git status
    - git push https://root:$ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:master
Enter fullscreen mode Exit fullscreen mode

注意事项

这并非没有缺点。以下是我在测试此设置时发现的一些问题。

  • Wiki、问题、讨论、版块等内容不会在两个托管服务提供商之间同步。这只会同步您仓库中的内容。有一些方法可以同步 Wiki(Wiki 本质上是一个隐藏的 .git 仓库,Github 和 Gitlab 都使用相同的 Wiki 格式)。
  • 同时拥有两个远程存储库可能会造成混淆
  • 如果同时在两个位置发生多次提交并产生冲突,它们可能会不同步(我只在我使用的存储库中使用它)
文章来源:https://dev.to/brunorobert/github-and-gitlab-sync-44mn
PREV
UI 测试最佳实践
NEXT
来自高级前端开发人员的 37 条建议 1. 掌握基础知识 2. 了解 Web 的工作原理 3. 熟悉数据结构和算法 4. 通过实践而不是阅读/观看来学习 5. 遇到困难时寻求帮助 6. 以正确的方式寻求帮助 7. 不要复制/粘贴你不懂的代码 8. 不要盲目地应用网上找到的每条建议 9. 假设善意:人们希望你成功❤️ 10. 完成比完美更重要 11. 始终将任务分解为可管理的任务 12. 当你需要帮助时,要值得信赖 13. 对工作表现出热情 14. 保持开放的心态来学习新事物/工具/方法 15. 掌握你的开发工具🛠️ 16. 专注于创造价值 17. 为你的工作辩护:它不会为自己说话 18. 宁可写愚蠢的代码,也不要写聪明的代码 19. 你的经理是你最好的盟友 20.让经理的工作更轻松 21. 了解任务背后的大局 22. 为团队做出贡献(文档、技术讲座、演示等) 23. 成为特定领域的“可靠人员” 24. 培养沟通技巧 25. 遇到问题时休息一下 26. 发挥你的优势,而不是弱点 27. 掌控你的职业道路 28. 与其他开发人员交流 29. 指导年轻的开发人员 30. 使你解决的问题多样化 31. 寻找导师 32. 致力于 JavaScript 框架并精通它 33. 不断考虑用户体验 34. 勇于说“不” 35. 持续投资于你的技能 36. 当面临太多工作时,减少功能而不是代码质量。 37. 努力理解你的合作者(设计师、后端开发人员等)