我一直在使用私有的GitLab实例来管理我的代码。但是由于现在与我一起工作的大部分员工都有GitHub账号,所以我真的很想把我的GitLab库同步到GitHub上。
我的情况:
- 运行GitLab(Omnibus)的服务器
- 一个GitHub账号,我将为其创建一个组织,让我和我的员工可以在一起组织。
我知道git中有一个--mirror
开关,但是我不确定它是如何工作的。我在网上找到的文档非常混乱...所以如果有人能帮助我就太好了 :)
我一直在使用私有的GitLab实例来管理我的代码。但是由于现在与我一起工作的大部分员工都有GitHub账号,所以我真的很想把我的GitLab库同步到GitHub上。
我的情况:
我知道git中有一个--mirror
开关,但是我不确定它是如何工作的。我在网上找到的文档非常混乱...所以如果有人能帮助我就太好了 :)
现在,GitLab有一个选项可以在UI中完成此操作,请转到您的存储库的Settings->Repository:
https://gitlab.com/yourUserNameInGitLab/yourRepoName/settings/repository
然后找到“镜像存储库”选项并单击展开。您要做的是选择“Push”镜像方向并填写此URL:
https://yourUserNameInGitHub@github.com/yourUserNameInGitHub/yourRepoName.git
在密码字段中,您必须使用个人访问令牌(因为GitHub现在已弃用密码访问),您可以在此生成:https://github.com/settings/tokens (不要忘记在生成时启用“repo”和“workflow”权限)
另一个选项是向 origin
添加一个额外的URL:
git remote set-url --add origin git@github.com:<USERNAME>/<PROJECTNAME>.git
当您推送到主机时,它将同时推送到原始源(gitlab)和上面添加的一个源(github)。
这个 StackOverflow 的问题 解决了如何将代码仓库从其他服务迁移到 GitHub,其中的第一个答案讲述了如何使用命令行完成迁移,而第二个和第三个答案则提供了更加用户友好的方式。但是如果你的 GitLab 实例在本地服务器上(这似乎是你的情况),这些方法都不适用。
然而,你可以通过命令行将代码仓库“导入”到 GitHub 中,具体方法可以参考 GitHub 文档,这也是官方建议的方式之一,因为 GitHub 还提供了另一种选择,即使用其 GitHub 导入工具(该工具在之前提到的 SO 问题中有介绍)。
下面是官方文档中列举的步骤:
从 GitLab 服务器中克隆出一个本地 bare 仓库:
git clone --bare https://githost.org/extuser/repo.git
Bare 克隆是完全复制一个仓库,但没有工作目录用于编辑文件,因此可以看做是一种干净的导出。
进入该目录,并使用 --mirror
标志推送到 GitHub。 这个标志确保了引用(分支/标签)被复制到 GitHub 上。
cd *repo.git*
git push --mirror https://github.com/ghuser/repo.git
最后删除你本地创建的仓库。
cd ..
rm -rf repo.git
如果您更喜欢使用SSH连接而不是HTTPS连接在GitLab和GitHub之间进行镜像,请执行以下操作:
git@github.com:yourusername/yourrepositoryname.git
)ssh://git@github.com/yourusername/yourrepositoryname.git
2021年8月13日后的文章:如果仅使用用户名和密码从GitLab到GitHub进行镜像,将失败,因为我们需要使用个人访问令牌(PAT)来进行此操作。
步骤1:从GitHub创建PAT:
您还应该能够看到您的个人访问令牌。请确保复制它,因为我们在以下步骤中需要它。
步骤2:从GitLab转到您要镜像的repo: