将Git存储库从GitHub分叉到GitLab


99

假设我想对其他人的项目实施修复。该项目位于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上创建一个镜像,然后分叉该镜像?
  • 还是我应该做一些完全不同的事情?

什么是正确的方法。

谢谢。

更新

GitLab上的存储库镜像可能没有意义。我可以在GitLab上创建MY GitHub存储库的镜像,但不能创建其他人的存储库的镜像。

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

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

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

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

Answers:


130

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

然后使用以下命令将GitHub项目添加为“上游”远程:

git remote add upstream https://github.com/user/repo

现在,如果有任何更改,您可以从上游获取和拉取。(如果您具有访问权限,也可以将其推送或合并。)

git pull upstream master

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

git push origin master

如果您不想手动拉上游/推原点,则GitLab在Settings => Repository => Mirroring Repository中提供镜像功能。


15
我只是想补充一下为什么这是正确方法的答案。“分叉”是由GitHub创建的概念,因此仅存在于GitHub上,但仍然很有用。如果您考虑使用纯git本身(例如在网络中某个地方运行的纯git服务器),则就像将存储库克隆到您自己的服务器,然后将其克隆到本地计算机一样。然后,将原始存储库添加为本地上游。我相信这就是GitHub在幕后所做的事情。
布鲁诺·芬尼

9
只是想补充一下,GitLab上确实存在分叉,请参见此处的示例。
bellackn

1
我不得不使用:拉上游大师--allow-
unrelated

以后如何提交拉取请求?
Erik Aronesty

1
@ErikAronesty棘手的是,“ Pull Requests”不是git,而是GitHub。不过,执行此操作的一种方法是在GitHub上创建副本,然后将分叉的存储库添加为另一个远程站点,例如git remote add upstream-fork git@github.com:myuser/repo。然后只需要git push upstream-fork master通过GitHub站点提交拉取请求即可。
克里斯·瓦茨

18

仅限浏览器的方式:

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

我没有Enterprise Edition许可证,即从步骤3中看不到“镜像存储库”。无论如何,如果我有这样的许可证,我可以创建其他人的GitHub存储库的镜像吗?
Cimlman

1
@Cimlman这很奇怪,因为我也有免费许可证。也许重新检查?在“设置”->“存储库”中应排在第三位。只是要清楚:侧边栏的设置,而不是配置文件菜单。
aksh1618

单击侧栏上的“设置”->“存储库”后,我可以看到“受保护的分支,受保护的标签,部署密钥,部署令牌”部分。
Cimlman

2
@Cimlman您是否正在使用自定义/本地gitlab实例?我在gitlab.com的个人基本帐户中有更多选择
aksh1618 '19

1
我们正在使用自我管理的安装版本10.7.2。最新版本是11.6。好,这是一个好点。:)我无法在我们的GitLab上尝试您的解决方案。无论如何,这个问题对我来说已经过时了。这全都与我们对第三方库的自定义错误修复有关。但是,该漏洞修复已被合并到该库的正式版本中。
Cimlman

0

可以分叉私有github存储库。

  1. 点击新项目
  2. 选择导入
  3. 选择github
  4. OAuth2用于验证和自动创建gitlab应用
  5. 选择要分叉的项目

^我刚刚在github上的私人仓库中完成了此操作,并成功导入了(inc分支等)。导入的项目会自动保密;)


2
项目导入需要“个人访问令牌”。我试图在GitHub上生成一个。当我想从GitHub上的项目在GitLab上创建项目时,此功能似乎很有用。这个假设正确吗?问题是关于分叉其他人的GitHub项目。
Cimlman

2
-1是因为,正如前面的评论所述,问题是关于派生其他人的github项目。在这种情况下,此答案中的说明将无效。
Nikos Alexandris

1
您确定@NikosAlexandris吗?您不能为您的帐户创建访问令牌并访问您具有读取权限的其他人的回购吗?(例如,每个公开回购)
DGoiko

0

除了分叉,您还可以仅使用Web界面导入任何公共可用的GitHub存储库:

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

最近使用了这项技术,即使没有GitHub帐户,它也可以在任何公共存储库上使用。有关信息源,请参见此GitLab文档页面。


1
好。并且,如果将新的提交添加到GitHub上的原始存储库中,我是否可以简单地将更改合并到GitHub上的存储库中?这是一个棘手的操作,也许没有中间存储库就无法完成(请参阅问题的最后一段)。
Cimlman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.