自动将所有 GitHub 存储库镜像到 GitLab

4
为了使用GitLab,每个仓库都需要手动设置拉取/推送镜像。
我想知道是否有任何方法可以自动同步所有Github仓库到GitLab,这样做的话:
  • 当你在GitHub上创建新的仓库时,GitLab中将自动创建一个仓库并充当拉取镜像。
  • 对于所有旧的GitHub仓库,在GitLab中设置将充当拉取镜像的仓库。
以下是我的想法:
提案:
  • 不使用GitLab Pull Mirror或GitHub Action进行推送
  • 方法0:在服务器上编写脚本,定期从GitHub拉取所有更改并将其推送到GitLab的本地
    • 问题:
      • 需要始终运行服务器,并且必须在驱动器中包含所有GitHub仓库。
  • 使用GitLab Pull Mirror:
  • 方法1:创建新的GitHub仓库时,Webhook会发送到一个脚本,该脚本可以创建GitLab仓库,然后设置镜像
    • 问题:
      • GitLab没有API可用于配置Pull Mirror,因此无法自动化。 现有功能请求
      • 即使有API,Pull Mirror也仅支持密码或部署密钥
        • 密码:您的GitHub帐户变得危险。
        • 部署密钥:
          • 必须通过程序检索部署密钥。
          • 似乎没有一种轻松的方法通过API自动将部署密钥附加到GitHub repo?
  • 使用GitHub Action模拟Push Mirror:
  • 方法2:一个常驻服务器不断检查GitHub repo是否有GitLab对应项,如果找到,则创建一个GitLab repo,并通过API将一个GitLab Action添加到该GitHub仓库中,以便将更改推送到新创建的GitLab repo。
    • 优点:
      • 所有旧的和新的GitHub仓库都将与GitLab链接。
    • 问题:
      • 由于服务器必须添加GitHub Action,这意味着它具有所有GitHub存储库的写入权限,如果服务器被黑客攻击,则黑客可以添加任何提交或更改提交历史记录。
      • GitHub Action将具有对应的GitLab存储库的写入权限
        • 可能是通过在GitHub secret中设置的SSH密钥

你尝试过什么?你做了哪些研究?什么没有起作用? - Daniel Mann
@DanielMann 我不知道从哪里开始,所以我问了这个问题。此外,在指南中,似乎没有要求问题必须附带尝试的方法和研究。只要问题定义明确且有意义,就是可以接受的。 - Luk Aron
@DanielMann 我的搜索和研究是我问题的第一句话。那个镜像必须为每个存储库手动设置,因此它无法解决这个问题。 - Luk Aron
2个回答

1

目前(截至Gitlab版本13.9),无法自动完成此操作。正如您在问题中所提到的,必须手动为您想要镜像的每个存储库完成此操作。


我相信有这样的工具,但是使用者必须对Github和GitLab的API非常熟悉。 - Luk Aron
是的,那绝对可以(我以前在想要为 Github 项目使用 Gitlab CI 时就这么做过),但我不认为那是“自动”的,因为它是一个非常自定义的设置。 - Adam Marshall
GitLab CI 通常只会导入 GitHub 存储库,包括所有先前的提交记录,但是 GitHub 存储库中的新更改不会反映在 GitLab 存储库中。 - Luk Aron

0
我以前也遇到过同样的情况,为了解决这个问题,我写了一个简单的工具来在GitLab和GitHub之间进行镜像同步。例如,它会将你在GitLab上可见的所有仓库进行镜像克隆,然后在你的GitHub账户上创建相应的仓库,并将其进行镜像推送。
目前还不支持Gitee,你可以查看tests.go文件来了解如何使用该工具。

https://github.com/kom0055/git-mirror

我正在撰写一个更具体的自述文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接