代码管理篇
工具
统一采用命令行工具进行日常的代码拉取,禁用任何一款图形化代码管理工具。
-
windows系统: cmder(强烈推荐,因为支持分屏和代码高亮),git Bash
-
mac os:任意一款命令行工具(iterm或原生)
问题
对于一个多人并行开发的一个大型项目来说,在代码合并到主分支的过程当中,难以避免会出现多人修改同一模块,发生代码冲突的现象,大量的代码冲突会带来以下问题:
-
合并代码者花费过多时间修复冲突;
-
冲突修复完毕,由于没过多时间回归(合并代码,修复冲突多发生在上线前1-2天),上线之后才报错;
因为模块的功能开发者,对修改模块的代码熟悉程度往往要比发版者高,因此,需要开发者在日常开发中就时刻保持对主分支的代码同步;
关于代码合并,大致有两种可支持的命令:merge
和 rebase
步骤
开发新功能
-
git checkout master
-
git pull origin master
-
git checkout -b feature/模块名
同步主代码
-
git fetch origin
-
git rebase origin/master
(1)代码无冲突,继续 rebase
过程:git rebase --continue
(2)代码有冲突,查看冲突文件,修复冲突,继续rebase
过程:
-
git status
(查看冲突文件) -
修复冲突文件
-
git add fileA fileB ...
(提交修复冲突后的文件) -
git rebase --continue
(继续rebase过程) -
git status
(查看当前仓库代码状态,是否还存在异常) -
git push -f origin 分支名
(提交)
ps: 如果在rebase
过程中存在任何不确定性问题,均可通过 git rebase --abort
命令中断此次rebase
过程,不会对当前分支代码造成任何影响
合并代码,提交发版
-
提交
pr
,修改合并分支,指向到preRelease
, 修改合并代码人; -
代码无问题审核通过,合并到
preRelease
,作为测试同学上线前的最后回归代码分支; -
后续需要修复
bug
,回到原分支修复完毕之后,重新提pr
,指向到preRelease
注意事项
-
如果对功能分支进行格式化代码,或者别的不属于当前模块代码进行大批量无意义修改操作,绝不允许代码合并,上线;(重要)
-
常用
git status
查看当前工作区代码情况; -
保持功能开发分支干净,比如说:不允许当前功能分支对别的未上线的分支代码进行代码合并操作;
-
preRelease
只作为发版代码,master
作为稳定线上代码,换句话说,所有的新功能分支只对master
代码进行代码同步操作; -
维护好自己的开发分支,每个功能分支至少保证两天一次
rebase
过程,如果过长时间(好几个月)没有进行代码同步,建议用merge
进行代码合并同步;因为rebase
是基于当前分支对合并分支的点对点的差异化比较
,merge
是基于当前分支的所有修改对合并分支的差异化比较
; -
推送完代码之后,去
gitlab
查看项目的分支图(gitlab 左侧 -> 仓库 -> 分支图
),通过看分支图来观看分支代码同步情况;