基于开源项目的自定义需求实现与同步管理
👋

基于开源项目的自定义需求实现与同步管理

Tags
Github
Gitlab
Published
September 4, 2024
Author
YidaHu

前言

在公司有一个需求:希望基于开源的项目添加一些自定义功能,形成自己的工具轮子,并在实现自定义的同时,依然能够方便地获取开源项目的新功能。这意味着我们不仅要对项目进行改造,还要保证与开源社区的同步,利用新版本中的有益功能。

背景与挑战

网上有很多关于从GitHub到GitHub的教程,主要通过fork操作实现代码的复制。fork过程会将别人的代码库从GitHub的远端库复制到自己的远端库中,保留所有的提交历史、分支和记录。然而,我们的代码库托管在自己的GitLab服务器上,而不是GitHub,因此需要找到适合在GitLab上实现类似功能的方法。
 

实现步骤

1. 在GitHub上创建测试项目
首先,在GitHub上创建一个名为“forktest”的测试项目,其中包含一个名为README.md的文件,内容如下:
fork me? fork you!
2. 模拟分支创建与代码提交
在代码提交管理工具(如Sourcetree)中进行分支创建和代码提交,最终的结构如下图所示:
notion image
3. 在GitLab上创建对应项目
接着,在GitLab上创建一个名为“Spoon-Knife”的项目,模拟真实情况,特意取了一个与GitHub项目不同的名字。
4. 将项目从GitHub复刻到GitLab
接下来,执行以下步骤将GitHub项目复刻到GitLab:
  1. 在本地创建一个名为newforktest的目录。
  1. 进入该目录,并将GitHub上的项目初始化到本地:
    1. git clone --bare <https://github.com/nevereverever/forktest.git>
      成功克隆后,检查代码结构。
  1. 进入forktest.git目录,执行推送操作:
    1. cd forktest.git/ git push --mirror [email protected]:luyang/Spoon-Knife.git
      此时可能会遇到权限错误,原因是本地全局用户不是GitLab用户。为解决这个问题,需要生成RSA公钥和私钥。
  1. 生成RSA密钥对:
    1. ssh-keygen -t rsa -C "[email protected]"
      然后,将生成的公钥加入GitLab的SSH key中,再次尝试推送,问题解决。
5. 校验与同步更新
为确保项目同步,可以设置upstream远端,将GitHub的更新拉取到GitLab的项目中。
  1. 先从GitLab拉取上传的工程。
  1. 模拟修改GitHub上原项目中的内容。
  1. 设置upstream远端:
    1. git remote add upstream <https://github.com/nevereverever/forktest.git>
  1. 选择从upstream拉取到GitLab上的项目。
最终,通过这个流程,实现了在GitLab上维护一个与GitHub同步的自定义项目,既满足了公司定制需求,又能从社区中获得最新的功能更新。

这个过程展示了如何在私有的GitLab服务器上实现类似GitHub的fork功能,解决了同步与定制化的双重需求。