最近要带一批实习生,由于之前本身 Git 提交也不是很规范,这次促使团队需要制定一些代码的规范,目前在编写团队的 Git 代码管理规范,想问一下大家平时都是怎么管理的。
- 分支的建立维护
- tag 的建立
- commit message 的填写格式
……
请大家在以上几个方面谈一谈自己平时工作中的做法以及效果。
大家可以畅所欲言,自由扩展其他方面。
最近要带一批实习生,由于之前本身 Git 提交也不是很规范,这次促使团队需要制定一些代码的规范,目前在编写团队的 Git 代码管理规范,想问一下大家平时都是怎么管理的。
请大家在以上几个方面谈一谈自己平时工作中的做法以及效果。
大家可以畅所欲言,自由扩展其他方面。
无数次跟组员说,定期 merge master,然后他们还是能把冲突的代码丢上来...
另外后续可能打算生成更新日志,commit message 如何填写能让 log 看起来顺眼点。
因为管理了好多项目,所以这个方面还是研究过一下子 ,主要使用了 GitFlow 规范
分支分为
新功能分支(feature),
修复分支(fix),
补丁分支(hotfix),
版本分支(release),
主分支(master),
开发分支(dev)
具体提交格式为
<type>[optional scope]: <description>
[optional body]
[optional footer]
* feat 新功能(feature)表示在代码库中新增了一个功能(这和语义化版本中的 [`MINOR`](http://semver.org/#summary) 相对应)
* fix 表示在代码库中修复了一个 bug(这和语义化版本中的 [`PATCH`](http://semver.org/#summary) 相对应)
* docs 文档(documentation)
* style (格式化, 缺失分号等; 不包括生产代码变动)
* refactor (重构代码)
* perf (性能优化)
* test (添加缺失的测试, 重构测试, 不包括生产代码变动)
* chore (更新grunt任务等; 不包括生产代码变动)
scope:一个可选的修改范围,用于标识此次提交主要涉及到代码中哪个模块。
description:简明扼要描述本次提交的内容,首字母无需大写,结尾不需要使用 `.`。
optional body:详细描述本次提交,比如此次变更的动机,如需换行,则使用 `|`。
optional footer:描述与之关联的 issue 或 break change。
commit Message 为 :
fix(module:baseuser): fix username field error
BREAKING CHANGE: xxxxxx
feature(module:auth): add oauth2 module
BREAKING CHANGE: 原登陆方式发生改变,现在提供jar oauth.auth(username,password):true|false
每次写新特性的时候要在 dev 拉一下最新代码然后 迁出 特性分支 比如要增加一个 用户的新增功能 分支名称可以为 feature/userAdd
然后开发完了推上去给 dev 分支合并,合并完了跑 ci 测试,ci 测试没问题,可以合并到 master
当 master 改动较多的时候就可以 发布一个 release 版本 从 master/dev 迁出 然后打 tag ,写 CHANGELOG.md(应该有工具能生成), 发布到 gitlab/github,然后然后然后合并到 master
资料转自:https://semlinker.com/ng-verson-manage/
如果多人开发,那么请配置 validate-commit 来确保所有人提交格式符合 GitFlow 规范:https://blog.eiyouhe.com/articles/2019/08/19/1566176660956.html?utm_source=hacpai.com#b3_solo_h1_7
另外 CHANGELOG 也有 Cli,可以试试:https://blog.eiyouhe.com/articles/2019/08/19/1566176660956.html#b3_solo_h2_12
所以 100 分给我吧,我求求你了
我们用 git 没那么多乱七八糟的,master 用于发布,分支用于开发,分支名不限制,但是依我的习惯的话要以开发的目标作为分支名,后缀开发者或者时间之类的,commit message 格式也没限制过,但是尽量保证一次 commit 是完整的
我还喜欢用 gitemoji 来标记本次提交的标记,可以参考 symphony 的提交记录,我就是从这里学的
其实比较重要的就是要让开发者知道每次拉分支的时候,从 master 拉去最新的代码再创建
git flow 想要严格遵守不是特别容易.这玩意还是有学习成本的.
我前段时间在公司推过这个规范,但基本没人关心怎么提交代码.
现在用起来的基本只有 master,feature,develop.
剩下分支种类,只要我不和他们说,他们就不用.
补充:
如果没有把 ci 用起来的话,分支合来合去,心里会很没底.
@participants
我参照 coding 这个流程,把其中的 master 换成 dev ,他这个持续集成的部分我集成到 test 环境,完了之后 合并到 master 大家觉得如何?
这种问题其实很简单:
不只是 commit message 和分支命名规范。我司的代码仓库有 PR 钩子,引入 coverity,对提交的代码用 SonarQube 进行静态分析,不符合代码质量规则的 PR 将无法合并
如果题主的库是放在 Github 上的,最好的办法就是符合 Github 的提交规范。例如首字母大写,标题用祈使句,内容和标题隔行写等等这些。因为你符合了这些规范不仅仅发邮件的时候内容清晰 ,而且会有意想不到的福利。例如可以用#+issue 的编号来标记并关闭相关的 issue😋 总之,规范要统一,要重视,更要专业。最讨厌一个项目几千个提交日志全是 commit it! 还不如不写
建议自己写一篇文章,制定自己的规范,让他们遵守就可以了。
大致内容如下:
哈哈哈。。。
我们用 svn!!!
我每次看到开发操作,切换分支,合并代码的都看着累。。。
不过我们提交日志写的很好,因为我们用 jira,必须带着 jira 号跟描述。我们的每一个任务都有 jira 号,包含需求、bug、数据修复、优化等。
我以前公司也是用 git,还特意培训过,我记得一家培训的是 git flow 的,一家是培训 github 的。
用 SVN 说明公司技术管理挺务实的,非大型分布式开发的项目根本没必要用 Git,根本就是浪费大家时间。SVN 就简单多了,只能更新解决冲突才能提交,基本杜绝了项目库被覆盖的风险。
加一段我写的 gitlab hooks 的脚本,主要是校验 commit msg
msg=`git show $newrev -s --format=%B`
if [[ $msg =~ ^(feat|fix|test|refactor|docs|style|chroe).*:.*$ ]]; then
echo "【commit message 通过检查】!"
else
echo "【commit message 不符合规范】"
echo "【缺少关键字: [feat,fix,docs,style,refactor,test,chore]】"
echo "【格式:<类型>(<影响范围>): <简要概述>】"
echo "【eg: feat(user): add the user login】"
echo "【eg: fix(影响范围):#禅道编号 】"
echo "【修改已提交message命令:git --amend -m <new message>】"
exit 1
break
fi
Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。
Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。
Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。
iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。
Open Source, Open Mind, Open Sight, Open Future!
Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
Github 地址:https://github.com/Hi-Windom/Sillot
Latke 是一款以 JSON 为主的 Java Web 框架。
愿逝者安息!
京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。
Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。
Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。
Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。
强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。
FlowUs.息流 个人及团队的新一代生产力工具。
让复杂的信息管理更轻松、自由、充满创意。
宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。
Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。
Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。
让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
新手上路,请谨慎驾驶!
Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。
Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。
Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。
这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于