[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.41s 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 keys 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: 到这里,问题得到了完美解决。