聊聊如何做日常的代码管理

178 阅读3分钟

代码管理篇

工具

统一采用命令行工具进行日常的代码拉取,禁用任何一款图形化代码管理工具。

  • windows系统: cmder(强烈推荐,因为支持分屏和代码高亮),git Bash

  • mac os:任意一款命令行工具(iterm或原生)

问题

对于一个多人并行开发的一个大型项目来说,在代码合并到主分支的过程当中,难以避免会出现多人修改同一模块,发生代码冲突的现象,大量的代码冲突会带来以下问题:

  • 合并代码者花费过多时间修复冲突;

  • 冲突修复完毕,由于没过多时间回归(合并代码,修复冲突多发生在上线前1-2天),上线之后才报错;

因为模块的功能开发者,对修改模块的代码熟悉程度往往要比发版者高,因此,需要开发者在日常开发中就时刻保持对主分支的代码同步;

关于代码合并,大致有两种可支持的命令:mergerebase

步骤

开发新功能

  • 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过程:

  1. git status (查看冲突文件)

  2. 修复冲突文件

  3. git add fileA fileB ... (提交修复冲突后的文件)

  4. git rebase --continue (继续rebase过程)

  5. git status (查看当前仓库代码状态,是否还存在异常)

  6. git push -f origin 分支名 (提交)

ps: 如果在rebase过程中存在任何不确定性问题,均可通过 git rebase --abort 命令中断此次rebase过程,不会对当前分支代码造成任何影响

合并代码,提交发版

  • 提交 pr,修改合并分支,指向到 preRelease, 修改合并代码人;

  • 代码无问题审核通过,合并到 preRelease,作为测试同学上线前的最后回归代码分支;

  • 后续需要修复 bug,回到原分支修复完毕之后,重新提pr,指向到preRelease

注意事项

  1. 如果对功能分支进行格式化代码,或者别的不属于当前模块代码进行大批量无意义修改操作,绝不允许代码合并,上线;(重要)

  2. 常用 git status 查看当前工作区代码情况;

  3. 保持功能开发分支干净,比如说:不允许当前功能分支对别的未上线的分支代码进行代码合并操作;

  4. preRelease 只作为发版代码,master 作为稳定线上代码,换句话说,所有的新功能分支只对 master代码进行代码同步操作;

  5. 维护好自己的开发分支,每个功能分支至少保证两天一次rebase过程,如果过长时间(好几个月)没有进行代码同步,建议用merge进行代码合并同步;因为rebase是基于当前分支对合并分支的点对点的差异化比较merge是基于当前分支的所有修改对合并分支的差异化比较

  6. 推送完代码之后,去gitlab查看项目的分支图(gitlab 左侧 -> 仓库 -> 分支图),通过看分支图来观看分支代码同步情况;