# GitLab流程说明

# 1、fork 项目

# 1.1 fork项目

产品上进行fork操作,命名空间(namespace)选择新项目放置的空间

# 1.2 修改项目信息

fork完成后,进入新fork完成后的项目,在Settings -> General中分别修改

  • General project 中的Project name为新名称
  • Advanced中的Rename repository中的path为新地址

# 2、clone项目分支

# 2.1 clone版本分支

git clone -b <版本分支名 eg:0925> <项目远程仓库>

# 2.2 修改版本分支名称

  • 本地分支名称修改:git branch -m <版本分支名 eg:0925> dev

  • 删除远程版本分支:git push --delete origin <版本分支名 eg:0925>

  • 上传新命名的本地分支:git push origin dev

  • 把修改后的本地分支与远程分支关联: git branch --set-upstream-to origin/dev

这样项目仓库就从主库迁出了一个自己的分支作为开发分支

注:这里的目的是把产品上面的版本分支作为项目的开发分支在项目上进行开发,为了规范需要修改掉分支名称,分支名称可以自定义,前提是当前没有同名分支存在

# 3、修改master分支

# 3.1 本地由dev分支切出master分支

  • 本地dev分支下:git checkout -b master

# 3.2 删除原master分支

  • Settings -> Repository->Proteced Branches中把master分支设置为“Unprotect“

  • Settings -> General -> General project-> Default Branch中将默认分支修改为 dev,保存。

  • Repository->Branches中删除master分支

# 3.3 新建远程master分支

  • 上传3.1创建的本地master分支:git push origin master

  • 把修改后的本地分支与远程分支关联: git branch --set-upstream-to origin/master

# 3.4 将master分支设置为默认分支和受保护分支

  • Settings -> General -> General project-> Default Branch中将默认分支修改为 master,保存。

  • Settings -> Repository->Proteced Branches中把develop分支设置为“Unprotect“,并设置masterProtect

# 4、同步源仓库更新

# 4.1 查看远程状态

git remote -v

如果没有添加过上游源仓库那么这里应该只有当前项目远程信息

# 4.2 添加远程上游源仓库即产品仓库

git remote add upstream <产品仓库>

# 4.3 再次查看远程状态,确认是否添加成功

git remote -v

这个时候应该有两条远程信息

# 4.4 同步上游分支代码

  • fetch 上游源库分支: git fetch upstream <上游分支名称>
  • 拉取上游源库分支代码: git pull upstream <上游分支名称>
  • 切换本地相应分支:git checkout dev
  • 合并本地分支与上游源库分支:git merge --no-ff upstream/<上游分支名称>

# 4.5 更新项目仓库远程分支

git push origin dev

# 5、更新上游源库

# 5.1 由上游迭代分支切出新本地分支repeater

  • fetch上游源库迭代分支:git fetch upstream dev:repeater

  • 切换到本地分支 git checkout repeater

# 5.2 上传repeater到远程分支

  • 在本地分支repeater进行修改,将项目成果集成到repeater
  • 拉取上游源库迭代分支更新:
    • git fetch upstream dev
    • git merge upstream/dev
  • 测试通过后上传远程分支:git push origin repeater

# 5.3 向上游源库提交merge request

  • 基于repeater分支创建merge request
  • Target branch选择上游源库中的迭代分支

至此项目从产品fork源码并从源库更新并向源库提交更新的整个流程就完成了。

# 6、产品开发验证项目提交成果

# 6.1 切出项目请求分支

  • 拉取请求分支:git fetch <项目库地址> <项目库请求分支 eg:repeater>

  • 基于请求分支切出本地分支: git checkout -b <项目仓库名>-repeater FETCH_HEAD

# 6.2 本地运行检查更新内容

# 6.3 本地合并请求分支

合并请求分支如果有冲突解决冲突

  • git checkout <目标分支eg:dev>

  • git merge --no-ff <项目仓库名>-repeater

# 6.4 提交合并到远程

将合并好的更新内容提交到远程仓库

git push origin <目标分支eg:dev>

提交完成后整就自动完成了对项目提交的请求内容的Merge操作