自动将所有 GitHub 仓库镜像到 gitlab

时间:2021-02-19 16:05:12

标签: git github gitlab

对于 GitLab,必须手动为每个存储库设置拉/推镜像。

我想知道有没有任何方式可以自动将所有 Github 存储库同步到 GitLab,这样

  • 当您在 GitHub 中创建新存储库时,GitLab 中的存储库将自动创建并充当拉取镜像。
  • 对于 Github 中的所有旧存储库,请在 GitLab 中设置存储库,使其充当拉式镜像。

以下是我的想法:

  • 提案:
    • 不使用 gitlab pull mirror 或 github action 来推送
      • 方法 0:服务器中的脚本定期将更改从所有 github 存储库拉取到本地 github 并推送到 gitlab。
        • 问题
          • 要求服务器始终运行,并且必须在驱动器中包含所有 github 存储库。
    • 使用 gitlab 拉镜像:
      • 方法一:当你在 GitHub 中创建一个新的 repo 时,webhook 被发送到一个可以创建 GitLab repo 的脚本,然后设置镜像
        • 问题
          • gitlab 中没有配置拉取镜像的 API,因此无法实现自动化。 existing feature request
          • 即使有api,pull mirror也只支持密码或deploy key
            • 密码:您的 github 帐户变得危险
            • 部署密钥:
              • 必须通过程序检索部署密钥
              • 似乎不是通过 api 自动将部署密钥附加到 github 存储库的简单方法?
    • 使用 github action 充当推送镜像:
      • 方法 2:服务器不断运行以检查是否有任何 GitHub 存储库在 Gitlab 中没有对应部分,如果找到,则创建一个 GitLab 存储库,通过 api 添加一个 gitHub 操作到该 GitHub 存储库,该存储库设置为将更改推送到新创建的 gitlab 存储库。
        • 优势:
          • Github 中的所有旧仓库和新仓库都将链接到 gitlab。
        • 问题:
          • 由于服务器必须添加一个github动作,这意味着它对所有github存储库具有写入权限,如果服务器被黑,黑客可以添加任何提交或更改提交历史。
          • github 操作将对对应的 gitlab 存储库具有写入权限
            • 可能是通过 github secret 中设置的 ssh 密钥
              • 所以秘密也必须由 api 添加,但似乎这样的 api 还不存在 github secret api

2 个答案:

答案 0 :(得分:1)

目前(对于 Gitlab 13.9 版)无法自动执行此操作。就像您在问题中所说的那样,必须为要镜像的每个存储库手动完成。

答案 1 :(得分:1)

经过一个月的研究,我找到了一种方法。

为此写了一个python脚本

https://github.com/AronWaterAron/Sync_GitHub_to_GitLab/blob/master/create_linkage.py