git开发规范
2018-08-15 11:25:48

在团队开发中,团队协作是比埋头编程更值得去深入的东西。一套好的开发流程(规范)可以避免很多不必要的麻烦,现在大部分的公司都使用 git 来进行代码管理,这里结合个人工作中的所得以及个人使用中经常遇到的坑,做个简单的总结。

对于 git 的编程规范来说,其实 git-flow 就是一套好的编程规范,它对工作中的 git 事务性的操作做了一个封装,在团队还不具有一定的规模化的情况下,使用 git-flow 是一个不错的选择。如关于常用分支的定义,就可以参考 git-flow 的思想:

master 只能用来包括产品代码。你不能直接工作在这个 master 分支上,而是在其他指定的,独立的特性分支中(这方面我们会马上谈到)。不直接提交改动到 master 分支上也是很多工作流程的一个共同的规则。

develop 是你进行任何新的开发的基础分支。当你开始一个新的功能分支时,它将是 开发 的基础。另外,该分支也汇集所有已经完成的功能,并等待被整合到 master 分支中。

但是当团队有了一定的规模化的时候,要求所有成员再去学习 git-flow 的使用,这样的成本也是很高的,所以这时候我们倾向于使用原生的命令来操作。

下面是我总结的在工作常用的场景下,对 git 的一些操作。

开发一个新的功能时

比较好的开发规范就是,当你开发一个新的需求时,应该按照下面的流程进行开发:

第一步:基于 develop 新建一个人分支

git checkout -b "new-branch"

第二步:同步个人分支至远程仓库

git push --set-upstream origin "new-branch"

使用 --set-upstream 的目的是跟踪远程分支。后面执行命令时可以省掉指定源的操作,如:

git pull origin test => git pull 
git push origin test => git push

第三步:功能开发完成后,发送 merge 请求

master 分支和 develop 分支应该被保护,只有稳定的版本才可以允许合并操作。合并的方式因团队而异,常规的流程是找到具有develop 分支开发权限的成员,执行:

git checkout develop
git merge "new-branch"

如果你的团队使用 gitlab 进行管理,就可以发送一个由 new-branchdevelop 分支的 merge request

如何写好一个 git comment

不应当出现语义模糊或毫无意义的 comment 描述。每个团队都要有自己的 comment 规范,当然也可以直接用大家都已经接受了的

feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
rebuild:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
config: 配置

example: git commit -m "[feat] 新功能"

以上总结自: 阮一峰: Commit message 和 Change log 编写指南]

如果你很皮,想加个开源库那样 comment 的表情,你可以执行:

git commit -m ':apple: i have a apple'

苹果就出来了,更多表情代码可以点 这里

做一个 hotfix 时

Hotfix 是为了应对已上线的产品代码出现的问题出现的紧急修复,所以和开发新功能的流程略有不同。 Hotfix 显而易见是基于 master 分支的。但实际的操作步骤和上面是一样的,这里不再赘述。

分支切换遇到问题时

这里的问题往往是:使用 checkout 切换分支时遇到的冲突,或者是 分支切换的时候遇到尚未添加至暂存区的代码。对于这两个问题,前者往往很容易解决,解决掉冲突,重新 checkout 就好。后者的话就有些头疼,假如你的源分支已经有了自己大量的神仙逻辑代码,所以你不想使用 git add 将这些文件添加到暂存区,你也不想用 git reset 的方式去处理,这时相对比较好的方式就是使用下面的方式:

git stash -u	暂存,区分与 git add 的暂存
git stash list	列出暂存内容
git stash pop 取回暂存

这样就可以畅快自如的切换分支了。很显然,使用 git satge 的方式条理也会更加清晰些。

怎么去处理构建任务时

这个场景可能与这篇文章不是那么符合。

如上所说,如果使用了 gitlab 来管理团队代码,gitlab 所集成的 CI/CD 也是很不错的 devops 的选择,目前的项目团队也在使用,使用工程化的 gitlab.ci 配置文件,来自动化执行测试、编译、构建、部署等一系列的工作,原来部署过程中繁杂的工作变成了 **如何去写好一个 gitlab.ci 文件?**。

如果没有使用 gitlab, 同样的,使用 github + travis.ci 也是比较流行的开源库的实现方案。

另外,在之前的工作中,也有使用过 TFS 的方式,这个是微软提供的服务,国内用的比较少(收费,价格还挺贵),国外很流行。这个的构建配置比起上面两个要复杂些,但是使用过程还是很舒畅的。

以上。

Prev
2018-08-15 11:25:48
Next