-
Notifications
You must be signed in to change notification settings - Fork 2
tiev plus协作工作流(来源于gitlab)
注意: Please execute
git config remote.origin.prune truefor your local clone !!!
tiev-sim 采用 feature branch workflow。
- 首先,
master分支包含经过周密测试的最稳定代码。 -
develop分支基于master进行演化, 用于进行联合调试和联合测试。 - 在基于相对完整和稳定的
develop分支上, 演化出7个固定的功能模块(包括high_performance_server,distributed_server,benchmark,api,front_end), 由各组开发成员进行开发,在这些分支上,开发者只能通过 Pull Request 的方式而不能通过 Push 的方式提交更新,以避免错误提交带来的负面影响。 - 最终在功能模块的基础上,开发者们可以构建日常最常用的特性分支(feature branch),并在这些分支上完成开发工作。 开发完成后,分支下游的改动逐层上传,上游集成各模块并处理各模块的冲突后,下游又拉取(pull)并迭代开发。 整个过程是异步进行的,模块之间的耦合较轻,效率和稳定性平衡较好。 分支演化的一个简易的示例如下所示:
master
├── hotfix
│ ├── hotfix_issue_123
│ └── ...
└── develop
├── high_performance_server
├── distributed_server
├── benchmark
├── API
| └── ROS
| | └── ROS 1.x
| | └── ROS 2.0
| └── CyberRT
| └── ...
├── front_end
│ └── judge_client
| └── observer_client
├──...
注意 在已有的稳定版本
master分支上发现了未预料的BUG,可从hotfix分支上创建新的hotfix_issue_123分支。注意 请大家严格遵守分支命名的示例规范,这样在使用时可以通过关键字在大量的分支中进行快速筛选,这需要所有人在命名习惯上的支持。 好的命名:
slam_odometryplanning_routingvision_parking_slot,不好的命名:vision_ParkingSlotplanning_suduguihuaissue_temp60-zcm.
本项目采用敏捷开发的基本工作流程,利用issue进行开发活动的管理。
- 首先,开发一个新功能前必须先撰写issue,内容采用feature模板,并对issue设置合理的Label (模块归属,讨论,ToDo等) 和计划的Due date(参考Milestone,可不完全一致)
- issue划分的参考准则是在较短的时间内<4周可完成的功能,较大的issue作为Epic或者进行拆分
- 其次,每周讨论将合理的issue分配到Doing并由Maintainer分配developer处理该issue
- Maintainer或者一名负责该issue的developer从该issue创建merge request或创建branch,并选择正确的目标分支 (包括
common,slam,vision,lidar,prediction,planning和control)- merge request 会直接创建一个WIP merge request,并且创建一个该issue的远端分支,WIP表示该merge request还未完成
- create branch 会创建一个该issue的远端分支
- 所有处理该issue的developer在本地创建该issue的远端分支的跟踪分支,直接在该分支上进行工作;或者继续创建该跟踪分支的子分支,完成子分支工作后merge到该跟踪分支上
- 完成工作后,maintainer负责处理该issue的merge request
- 模块分支 (包括
common,slam,vision,lidar,prediction,planning和control) 定期由Maintainer负责提出合并到develop分支的Merge request
-
克隆项目:
git clone https://gitlab.com/tjiv/tiev-plus.git
-
从ISSUE创建工作分支
- 打开想要工作的issue,点击issue右侧的Create merge request右侧的下拉按钮,命名该分支名$MODULE_$FEATURE,并选择该分支所基于的分支$MODULE,即从
common,slam,vision,lidar,prediction,planning,control和hotfix(用于修复新发现的BUG) 中选择一个. - 然后创建分支

- 打开想要工作的issue,点击issue右侧的Create merge request右侧的下拉按钮,命名该分支名$MODULE_$FEATURE,并选择该分支所基于的分支$MODULE,即从
-
切换到所创建的模块分支
git fetch origin git checkout -b $MODULE_$FEATURE origin/$MODULE_$FEATURE # 同一个分支上合作的人数通常不超过3人
-
写代码, 提交(
commit)修改:git status # 查看变动文件 git add . # 添加所有修改的文件到暂存区 git commit -am "功能实现了一点了" git commit -am "功能又实现了一点了" git commit -am "功能快实现了" git commit -am "功能实现了"
-
解决与上游最新版本代码的冲突,并推送(push)分支到 GitLab:
git pull # 远端分支合并,可能要处理conflict git merge origin/$MODULE # 上游分支合并,可能要处理conflict [10月18日更新] git push origin $MODULE_$FEATURE
-
在GitLab页面上查看你的提交, 确认无误后点击网页上的按钮创建一个 merge request 到你对应的 $MODULE 分支.


注意!如果你对于squash后的冲突处理感到麻烦,不勾选squash完全可以接受。
-
团队中负责上游分支的同学或老师将查看提交的代码,并将他们合并到上游分支或主分支.
-
通常,下游的分支应该在开始新一轮作业之前,先 pull & merge 上游分支的修改,以减少版本差异。 有时在功能分支基础上临时增加新的开发需求,临时分支可以不推送到远端,合并到功能分支后删除。
git pull git checkout $MODULE_$FEATURE git merge origin/$MODULE # 上游分支合并,可能要处理conflict [10月18日更新] # then start work on the current branch
-
在远端分支被 GitLab 删除后,本地需要使用
git remote prune origin命令进行同步删除,否则还会在git branch -a命令下看到以前的缓存。
1.develop分支下的Dockerfile、.gitlab-ci.yml、/module/CmakeList.txt这些内容尽量避免修改,如果需要在Docker环境中安装软件或库,找到文件中“# Final SetUp”,在该行上一行添加需要安装的库,这样可以让Docker从你修改的位置开始重新构建镜像。
2.需要提交代码到develop时,第一次合并develop分支的处理很重要,如果出现冲突,不属于自己的模块代码请保留develop分支内容。
3.提交merge申请前再pull一下develop分支,确保develop分支没有更新。