代码管理实践
1.问题
实际工程工作中遇到了一些问题:
- 同一个产品服务于多个项目,需要维护多版本多release
- 团队多人使用同一个repo写不同产品的代码
- 代码库需要可以回溯、可归档,自动生成release note
2. Commit Message
2.1. 规范实践
- 工程实践中,经常出现一个团队多个人用同一个git repo来开发代码
- 该repo同时对应了多个服务或者组件,而每个服务需要独立维护自己的版本控制和发布
针对上述的情况,在实践中总结出如下的commit message 模板:
# [Issue] Type(<scope>): <subject>
# <body>
# <footer>
可以参考大神的文章 Commit message 和 Change log 编写指南
- Header
issue字段
对应工程控制的issue,例如redmine、jira或者github issue
type字段
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
scopre字段
对应相关服务/应用/组件/框架名称
subject字段
commit的简述,不超过50个字符
- Body
本次 commit 的详细描述,可以分成多行,可省略
- Footer
用来关闭 Issue或以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法, 可省略
2.2. 本地git配置
可以下载本文中的git commit message 模板文件后配置到本地git中 git_commit_template.txt
wget http://source.snowwalf.com/20180723/git_commit_template.txt -O ~/.git_commit_template.txt
git config --global commit.template ~/.git_commit_template.txt
注意 –global对全局生效,如果仅对当前repo生效,请使用–local
3. Changelog生成
本地脚本用于生成changelog文件 changelog.sh
Git changelog generator
Usage: changelog.sh [Options]
Options:
-a [app] app name, the same as score in git commit
-f [output_file] output file, default to be "CHANGELOG.md"
-h Show usage
-r [release] new release version, default to be "v1.0.0.0"
-t [tag_prefix] exist tag prefix, such as FGP for version FGPv1.0.2.0
Example:
./changelog.sh -a feature-group-private -b dev -r v1.0.0.1 -t FGP