JiHu(GitLab) MR Flow

2021-05-13

我们这里涉及到三个 repo, 分别是:

  1. https://gitlab.com/gitlab-org/gitlab.git

    这是 GitLab 维护的 CE 和 EE 版本的分支, 是最源头的 repo.

    记作: ORG-REPO .

  2. https://gitlab.com/gitlab-jh/gitlab.git

    Fork and Mirror from ORG-REPO.

    额外添加的功能会放在 jh 目录下.

    记作: JH-REPO .

  3. https://gitlab.com/icbd/gitlab.git

    Fork and Mirror from ORG-REPO.

    主要用来给 ORG-REPO 提交 MR .

    记作: ICBD-REPO .

Flow

  1. JH-REPO 上开发新功能

     git checkout main-jh
     git pull
     git checkout -b feat/new_feature
    

    JH 特有的代码放到 jh 目录下, 公共的的代码做到兼容 CE 和 EE .

    提交 MR 等待 CI 和 Review 通过.

  2. ICBD-REPO 上提取公共代码

     git remote add jh https://gitlab.com/gitlab-jh/gitlab.git
     git fetch jh feat/integrate_cn_version
        
     git checkout master
     git pull
     git checkout -b common/feat/new_feature
    
     # Pick commits and deal with conflicts
     git cherry-pick b441a0de..ddaf8745
        
     # Squash commits
     git rebase -i 2b11c0c45b3 
    
     # Delete jh code and commit common code
     git reset HEAD^
    

    提交公共部分的修改到 ICBD-REPO.

    提交 MR 等待 CI 和 Review 通过.

  3. JH-REPO 上 rebase

    ORG-REPO 的 MR Merge 之后, mirror 自动将改动 sync 给 JH-REPO.

    由项目的 maintainer 更新 main-jh :

     git checkout main-jh
     git pull
     git fetch origin master
     git merge master
    

    由 developer 变基:

     git fetch origin main-jh
     git checkout feat/new_feature
     git rebase main-jh
    

    重来一遍 CI 和 Review.

    Merge.