前言
有一个需求:希望基于开源的项目添加一些自定义功能,形成自己的工具轮子,并在实现自定义的同时,依然能够方便地获取开源项目的新功能。这意味着我们不仅要对项目进行改造,还要保证与开源社区的同步,利用新版本中的功能。
背景与挑战
网上有很多关于从GitHub到GitHub的教程,主要通过fork操作实现代码的复制。fork过程会将别人的代码库从GitHub的远端库复制到自己的远端库中,保留所有的提交历史、分支和记录。然而,我们的代码库托管在自己的GitLab服务器上,而不是GitHub,因此需要找到适合在GitLab上实现类似功能的方法。
实现步骤
1. 在GitHub上创建测试项目
首先,在GitHub上创建一个名为“forktest”的测试项目,其中包含一个名为
README.md
的文件,内容如下:fork me? fork you!
2. 模拟分支创建与代码提交
在代码提交管理工具(如Sourcetree)中进行分支创建和代码提交,最终的结构如下图所示:
3. 在GitLab上创建对应项目
接着,在GitLab上创建一个名为“Spoon-Knife”的项目,模拟真实情况,特意取了一个与GitHub项目不同的名字。
4. 将项目从GitHub复刻到GitLab
接下来,执行以下步骤将GitHub项目复刻到GitLab:
- 在本地创建一个名为
newforktest
的目录。
- 进入该目录,并将GitHub上的项目初始化到本地:
git clone --bare <https://github.com/nevereverever/forktest.git>
成功克隆后,检查代码结构。
- 进入
forktest.git
目录,执行推送操作:
cd forktest.git/ git push --mirror [email protected]:luyang/Spoon-Knife.git
此时可能会遇到权限错误,原因是本地全局用户不是GitLab用户。为解决这个问题,需要生成RSA公钥和私钥。
- 生成RSA密钥对:
ssh-keygen -t rsa -C "[email protected]"
然后,将生成的公钥加入GitLab的SSH key中,再次尝试推送,问题解决。
5. 校验与同步更新
为确保项目同步,可以设置
upstream
远端,将GitHub的更新拉取到GitLab的项目中。- 先从GitLab拉取上传的工程。
- 模拟修改GitHub上原项目中的内容。
- 设置
upstream
远端:
git remote add upstream <https://github.com/nevereverever/forktest.git>
- 选择从
upstream
拉取到GitLab上的项目。
最终,通过这个流程,实现了在GitLab上维护一个与GitHub同步的自定义项目,既满足了公司定制需求,又能从社区中获得最新的功能更新。
这个过程展示了如何在私有的GitLab服务器上实现类似GitHub的fork功能,解决了同步与定制化的双重需求。