前言
在git專案中,通過添加CHANGELOG.md可以展示專案的版本更新記錄,方便用戶查看專案的重大bug修復或不兼容版本資訊,
本文介紹一個 changelog 工具,使用git命令獲取git repository中的所有tags和commits log,生成CHANGELOG.md,
一、使用方法
安裝:
go install github.com/xpunch/changelog
打開專案目錄運行
changelog
或者通過命令列指定專案目錄
changelog --source ~/gitrepo --output ~/gitrepo/CHANGELOG.md --fetch --verbose
二、代碼實作
1、呼叫git命令
func git(dir string, args ...string) (string, error) {
cmd := exec.Command("git", args...)
var out bytes.Buffer
cmd.Stdout = &out
cmd.Dir = dir
err := cmd.Run()
return out.String(), err
}
通過exec呼叫git命令,并傳入引數,需要本地git命令可以運行,并擁有repository的訪問權限,
2、拉取最新的repository
git fetch --all
更新本地倉儲的tags和commits,保證生成的CHANGELOG.md是基于最新的提交記錄,
3、獲取tags
git tag -n -l --sort=creatordate --format %(refname:short);%(creatordate:short);%(subject)
通過上面的命令可以獲取所有的tag資訊,
4、獲取tag間提交記錄生成
git log --no-merges --format=oneline tagA..tagB
通過上面的命令可以獲取兩個tag間的提交記錄,
5、整合獲取的git資訊,生成CHANGELOG.md
使用 github.com/hashicorp/go-version 比較版本號大小,并重新排序,
sort.Slice(records, func(i, j int) bool {
s, t := records[i].Version, records[j].Version
vs, err := version.NewVersion(s)
if err != nil {
return s < t
}
vt, err := version.NewVersion(t)
if err != nil {
return s < t
}
return vs.LessThan(vt)
})
根據提交資訊前綴簡單分為Features和Bug Fixes
if strings.HasPrefix(msg, "[fix]") {
records[i].BugFixes = append(records[i].BugFixes, strings.TrimSpace(strings.TrimPrefix(msg, "[fix]")))
} else if strings.HasPrefix(msg, "[feat]") {
records[i].Features = append(records[i].Features, strings.TrimSpace(strings.TrimPrefix(msg, "[feat]")))
} else if strings.HasPrefix(msg, "[feature]") {
records[i].Features = append(records[i].Features, strings.TrimSpace(strings.TrimPrefix(msg, "[feature]")))
} else if strings.Contains(msg, "fix") {
records[i].BugFixes = append(records[i].BugFixes, msg)
} else {
records[i].Features = append(records[i].Features, msg)
}
最終效果:
# 1.1.0 (2022/01/17) ### Features - separate features and bug fixes disable fetch by deafult ### Bug Fixes - fixing first tag not have commit logs issue # 1.0.0 (2022/01/14) ### Features - support create changelog.md from git repository - Initial commit
總結
本文介紹了如何使用go呼叫git命令,利用git相關命令獲取歷史提交記錄,并生成CHANGELOG.md檔案,
CHANGELO格式只是我根據自己的理解定義的,如果需要自定義格式,可以fork代碼自行修改,
完整代碼:https://github.com/xpunch/changelog
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418079.html
標籤:其他
