将 git 存储库从 GitLab 转移到 GitHub - 我们可以,如何转移和陷阱(如果有的话)?

Posted

技术标签:

【中文标题】将 git 存储库从 GitLab 转移到 GitHub - 我们可以,如何转移和陷阱(如果有的话)?【英文标题】:Transfer git repositories from GitLab to GitHub - can we, how to and pitfalls (if any)? 【发布时间】:2014-04-11 12:42:57 【问题描述】:

如果需要,可以将存储库从 GitLab 转移到 GitHub。如果是这样,我该如何做同样的事情?

此外,考虑到我可能决定最终将它们移至 GitHub(因为它目前有更多我可能会觉得方便的功能)对于我的项目)。

【问题讨论】:

【参考方案1】:

您可以转移这些(只需将遥控器添加到 GitHub 存储库并推送它们)

在 GitHub 上创建一个空仓库 git remote add github https://yourLogin@github.com/yourLogin/yourRepoName.git git push --mirror github

历史将是相同的。

但是您将失去访问控制(在 GitLab 中定义的团队对您的存储库具有特定访问权限)

如果您在使用 GitHub 存储库的 https URL 时遇到任何问题:

The requested URL returned an error: 403

你需要做的就是输入你的 GitHub 密码,但是 OP 建议:

那么您可能需要以 ssh 方式推送它。您可以在此处阅读有关如何操作的更多信息。

见“Pushing to Git returning Error Code 403 fatal: HTTP request failed”。

【讨论】:

谢谢冯-您的回答对我有用。我刚刚在您的回答中添加了一些关于确切的 git remote add cmd 并在需要时以 ssh 方式推送的内容。希望没关系。 @boddhisattva 没关系,但我看到你的编辑被拒绝了。我自己在答案中添加了它。 关于导入问题和标签的任何cmets?除了代码之外的任何东西都可以通过拉和推来导入吗?谢谢。 @kiki 它将推送 all 本地分支,但如果您的本地 repo 本身是一个克隆,它将只有 master 作为其默认的本地签出分支。在使用push --mirror 之前,您必须先在其repsective 远程跟踪分支之后创建其他本地分支。 ***.com/a/18911322/6309。另见***.com/a/24099141/6309(最后一句)提到的替代方案 @ReggieEscobar 不,你可以删除origin, (git remote remove origin) 将github origin 重命名为origin (git remote rename origin github),然后继续git push (到@98765433) @,现在是 GitHub):从 GitLab 到 GitHub 的转移完成。【参考方案2】:

这很容易通过导入存储库功能 登录github.com,

您会在个人资料图片的一侧找到+ 按钮单击该按钮,然后将出现import repository 的选项。 你会发现这样的页面。 您的旧存储库的克隆 URL 是必需的,在您的情况下是 gitlab repo url。 然后选择所有者,然后键入此 repo 的名称,然后单击开始导入按钮。

【讨论】:

这个超级方便,GitHub已经添加了。但是,如果它是防火墙后面的内部 GitLab,它将无法工作,这代表了 GitLab 的一个大用例。 只是给使用导入选项的其他人的快速说明。我必须在 GitLab 上禁用 MFA 才能正常工作。 这很好用。比公认的答案好得多 导入的仓库现在不一定要公开,因为 github 已经免费添加私有仓库了。 @D-Day 您不需要禁用 MFA。我遇到了同样的问题,您需要做的就是在 GitLab 上创建一个个人访问令牌,并在导入 GitHub 时将其用作您的密码。【参考方案3】:

如果你想迁移包含 wiki 和所有问题和里程碑的 repo,你可以使用 node-gitlab-2-github 和 GitLab to GitHub migration

【讨论】:

仅供参考 node-gitlab-2-github 可以迁移问题、PR、标签和里程碑,并且功能更丰富一点,另一个可以迁移问题、里程碑和 wiki,但不太复杂【参考方案4】:

如果你在 GitLab 上启用了 MFA,你应该去 Repository Settings/Repository ->Deploy Keys 并创建一个,然后在 GitHub 上导入 repo 时将其用作登录

【讨论】:

几乎可以肯定你想要一个部署令牌,而不是部署密钥。 (你需要一个用户名/密码给 GitHub,你不能在那里上传私有 ssh 密钥。)【参考方案5】:

您可以使用以下命令:

cd existing_repository
git remote rename origin old-origin
git remote add origin <yourRepository.git>
git push -u origin --all
git push -u origin --tags

如果出现错误,可以尝试使用-f命令强制推送,输入如下:

git push -u -f origin --all
git push -u -f origin --tags

这将是 GitLab 推荐的在 GitHub 上导入现有存储库的路径,但是,如果您将 &lt;yourRepository.git&gt; 链接更改为 GitHub 上的存储库链接,则可以采用另一种方式,从 GitLab 转移到 GitHub。在实践中,您创建一个新的起源并强制推动一切。

【讨论】:

【参考方案6】:

使用默认的 Github 存储库导入是可能的, 但只需确保在 Gitlab 中未启用 两因素身份验证。

谢谢

【讨论】:

【参考方案7】:

对于仍在寻找一种更简单的方法来将存储库从 Gitlab 转移到 Github 同时保留所有历史记录的人。

步骤 1. 登录 Github,创建一个与您要转移的 repo 名称完全相同的私有 repo。

第 2 步。在“从命令推送现有存储库”下复制新存储库的链接,它将如下所示:

git@github.com:your-name/name-of-repo.git

步骤 3. 打开您的本地项目并查找文件夹 .git 通常这将是一个隐藏文件夹。在.git 文件夹中打开config

配置文件将包含如下内容:

[remote "origin"]
url = git@github.com:your-name/name-of-repo.git
fetch = +refs/heads/:refs/remotes/origin/

[remote "origin"] 下,将 URL 更改为您在 Github 上复制的那个。

步骤 4. 在终端中打开您的项目文件夹并运行:git push --all。这会将您的代码以及所有提交历史推送到 Github。

第 5 步。为确保一切按预期工作,进行更改、提交、推送和新提交应出现在新创建的 Github 存储库中。

第 6 步。作为最后一步,您现在可以归档 Gitlab 存储库或将其设置为只读。

【讨论】:

进一步阅读,看这篇文章android.jlelse.eu/… 如果这个方法没有“坑”,同时推送到gitlab和github是个不错的方法。你应该只输入相关的网址:一个在另一个。【参考方案8】:

您可以按照以下 2 个步骤简单地将 GitLab 项目连同包含的历史记录和提交转移到 GitHub:

    单击 Github 配置文件右侧的设置,然后选择导入存储库。然后在旧的存储库 URL 上粘贴 Gitlab 要转移的存储库链接。按照所附截图Steps to import git repository

    点击导入,然后在验证登录凭据后等待一分钟,最后你就完成了。检查您的 GitHub 存储库以查看更改。

【讨论】:

【参考方案9】:

一种简单的解决方案是向本地存储库添加一个远程 URL。

步骤:

git remote add <name> <URL>
git push name 

例子:

git remote add github_origin https://github.com/...
git push github_origin

【讨论】:

以上是关于将 git 存储库从 GitLab 转移到 GitHub - 我们可以,如何转移和陷阱(如果有的话)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将包含所有分支的 Git 存储库从 Bitbucket 移动到 GitHub?

Eclipse:将 git 存储库从项目重定位到工作区

将 Android 项目转移到 Git 私有服务器

使用没有主干标签和分支的 SVN 存储库从 SVN 迁移到 Git

如何将Git存储库转移到另一个主分支

如何防止 Git/Gitlab 修改 EOL 字符?