从GitHub到GitLab分叉Git存储库

Cim*_*man 50 git github gitlab git-fork

假设我想对其他人的项目实施修复.该项目驻留在GitHub上.

我可以在GitHub上创建一个fork并实现修复.

但是,我想在GitLab而不是GitHub上创建我的fork.

那可能吗?怎么样?

我读过这篇文章:https: //about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

无论如何,我不知道在我的情况下我该怎么做.

  • 我应该以某种方式从GitHub在项目的GitLab上创建一个fork吗?
  • 或者我应该从GitHub在项目的GitLab上创建一个镜像?
  • 或者我应该在GitLab上创建一个镜像然后分叉镜像?
  • 或者我应该做一些完全不同的事情?

什么是正确的方法.

谢谢.

UPDATE

GitLab上的存储库镜像可能没有意义.我可以在GitLab上创建一个MY GitHub存储库的镜像,但是我无法创建其他人的存储库镜像.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

这是我到目前为止所做的:

我已将原来的GitHub项目克隆到我的本地机器上.我已将修复程序提交到本地存储库中的新分支.我在GitLab上创建了一个空项目.我已将我的本地存储库中的原点设置为GitLab上的空项目,并将两个分支推送到GitLab.我已将本地存储库中的上游设置为GitHub存储库.

当我想从原始的GitHub存储库获取新的提交到GitLab上的存储库(即同步存储库)时,我可以使用我的本地存储库作为中间步骤.但是,GitHub上的repo和GitLab上的repo之间没有直接的联系.我的设置是否正确?如果我在GitHub上做一个分叉有什么区别吗?

CJx*_*JxD 70

如果您只想跟踪更改,请首先在GitLab(或您可能正在使用的任何其他内容)中创建一个空存储库,然后将其克隆到您的计算机上.

然后将GitHub项目添加为" 上游 "远程:

git remote add upstream https://github.com/user/repo
Run Code Online (Sandbox Code Playgroud)

现在,如果有任何变化,您可以从上游获取和拉取.(如果您有访问权限,也可以推送或合并到它.)

git pull upstream master
Run Code Online (Sandbox Code Playgroud)

最后,回到您自己的GitLab存储库:

git push origin master
Run Code Online (Sandbox Code Playgroud)

如果您不想手动拉取上游/推送源,GitLab在Settings => Repository => Mirroring repositories中提供镜像功能.

  • 我只是想补充一下为什么这是正确方法的答案。“分叉”是由GitHub创建的概念,因此仅存在于GitHub上,但仍然很有用。如果您考虑使用纯git本身(例如在网络中某个地方运行的纯git服务器),则就像将存储库克隆到您自己的服务器,然后将其克隆到本地计算机一样。然后,您将原始存储库添加为本地上游。我相信这就是GitHub在幕后所做的事情。 (11认同)
  • 上游是正确的方法。 (6认同)
  • 稍后如何提交拉取请求? (4认同)
  • 只想添加在GitLab上存在的_does_分叉,请参阅[here](https://docs.gitlab.com/ee/workflow/forking_workflow.html)。 (2认同)
  • 我必须使用:pull upstream master --allow-unrelated-histories (2认同)
  • @ErikAronesty 这更棘手,因为“拉取请求”不是 git 的东西,而是 GitHub 的东西。不过,实现此目的的一种方法是在 GitHub 上分叉一个副本,并将分叉的存储库添加为另一个远程仓库,例如“git remote add upper-fork git@github.com:myuser/repo”。然后只需执行“git Push upstream-fork master”并通过 GitHub 站点提交您的拉取请求即可。 (2认同)

小智 14

您可以仅使用 Web 界面导入任何公开可用的 GitHub 存储库,而不是进行分叉:

  1. 从 GitLab 仪表板中单击“新建项目”
  2. 切换到导入项目选项卡
  3. 单击“按 URL 存储库”按钮
  4. 填写“Git 存储库 URL”和其余项目字段
  5. 单击创建项目开始导入过程
  6. 完成后,您将被重定向到新创建的项目

最近使用了这种技术,即使没有 GitHub 帐户,它也适用于任何公共存储库。请参阅此GitLab 文档页面以获取信息来源。

  • 好的。如果将新提交添加到 GitHub 上的原始存储库,我可以简单地将更改合并到 GitHub 上的存储库吗?这是一个棘手的操作,如果没有中间存储库,可能无法完成(请参阅问题的最后一段)。 (2认同)

aks*_*618 7

仅限浏览器的方式:

  1. 在Gitlab中创建一个新项目(只需一个有名称的空项目即可)
  2. 转到设置->存储库
  3. 在“镜像存储库”下输入GitHub URL
  4. 确保“镜像方向”为“拉”
  5. 按“镜像存储库”按钮
  6. 按出现的条目旁边的同步图标

  • @Cimlman 这很奇怪,因为我也有免费许可证。也许再检查一下?应该位于“设置->存储库”中的第三个。需要明确的是:侧边栏上的设置,而不是配置文件菜单。 (2认同)
  • @Cimlman您是否正在使用自定义/本地gitlab实例?我在gitlab.com的个人基本帐户中有更多选择 (2认同)
  • 我们使用的是自我管理安装,版本 10.7.2。最新版本是 11.6。好的,这是一个好点。:) 我无法在我们的 GitLab 上尝试您的解决方案。无论如何,这个问题现在对我来说已经过时了。这都是关于我们对第三方库的自定义错误修复的。但是,该错误修复已合并到该库的正式版本中。 (2认同)
  • GitLab.com 曾经允许 PULL,但看起来它在某个时候停止了,因为现在它只显示 PUSH 选项,并且我所有的镜像配置都消失了。必须求助于 cron 作业。 (2认同)