[Git]如何实现github->gitlab(类fork功能)

公司有个需求:希望基于开源的轮子在上面做一些满足自己需求的功能做成自己的轮子。最终改造为,既实现了改造,又没有完全脱离开源社区。也就是说,有些新版本上面好的功能还是想直接拿过来用。

描述

网上只有github到github的教程,其实就是fork,官网直接中文音译为“复刻”,也算是比较贴切,也就是将别人的代码从别人的github远端库复刻到自己的github远端库,里面会保留别人所有的提交历史、分支和记录。
但是头疼的是,我们没有将源代码托管在github,而是自己服务器的gitlab上,因此需要考虑其他实现形式。
后来查找了一些资料,然后加入了自己的一些理解,最终完成了这个需求。

具体流程

1.在github上面创建一个测试项目,名称为"forktest"
在这里插入图片描述
里面有一个名为"README.md"的文件:

fork me?fork you!

2.模拟创建分支与代码提交。

这里不做具体的说明,大概在sourcetree里面看到最终结果是这样:
在这里插入图片描述
3.然后,在gitlab里面创建一个名为Spoon-Knife的项目(注意,我特意模拟真实情况,取了和github项目中不同的名字)
在这里插入图片描述
4.复刻到gitlab

(1)本地创建一个名为newforktest的目录

(2)进入这个目录,将所有github上面的代码初始化到本地

$ git clone --bare https://github.com/nevereverever/forktest.git
Cloning into bare repository 'forktest.git'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 1), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.

此时查看被克隆下的代码:

$ ll
total 4
drwxr-xr-x 1 Administrator 197121 0  1月 15 16:36 forktest/
drwxr-xr-x 1 Administrator 197121 0  1月 15 16:37 forktest.git/

(3)进入forktest.git目录,然后执行push操作:
在这里插入图片描述

$ cd forktest.git/
$ git push --mirror git@172.18.20.41:luyang/Spoon-Knife.git
git@172.18.20.41's password:
fatal: 'luyang/Spoon-Knife.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

说明下,这里报了个错,大概意思就是我没有权限。
问题主要还是因为我的全局用户不是gitlab上的用户。不改全局用户配置行不行呢?行,看下一步。
(4)生成rsa公钥和私钥

$ ssh-keygen -t rsa -C "luyoung0919@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:SPadZOojh43CBiwQk0Qk0VSCtOWqCGfVz0TNe5F2xSs “luyoung0919@gmail.com
The key's randomart image is:
+---[RSA 3072]----+
|X@oo.   .o   . o.|
|+o=. . .  o + . .|
|.. .. + . oo o  .|
|.... o * =...E . |
|o.=   . S o.  .  |
|++ o   =         |
|o   + + =        |
|   . . o .       |
|                 |
+----[SHA256]-----+

在这里插入图片描述
这里打开id_rsa.pub,将这段公钥内容抠出来:

在这里插入图片描述
然后在gitlab中加入ssh key校验:
在这里插入图片描述
在这里插入图片描述
再次尝试推送:
在这里插入图片描述
呵,这么简单就成功了,没有挑战性。

5.校验
(1)先把上传到gitlab上面的工程pull下来;
(2)模拟别人轮子的修改,也就是修改github上面的文件:
在这里插入图片描述
(3)设置upstream远端:

git remote add upstream https://github.com/nevereverever/forktest.git

这里也可以通过sourcetree界面化操作:
在这里插入图片描述
(4)选择从upstream拉取到gitlab上面的工程Spoon-Knife:在这里插入图片描述
在这里插入图片描述
到这里,问题得到了完美解决。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值