以前用SVN的时候,记得每次提交,有个版本号会随提交次数而增加,这样可以方便看到线上版本和开发版本之间一不一致,但换到Git后,这样的功能却没有了,不过现在利用Hook,同样可以实现这样的功能,Let’s Do It!
- 环境要求
- win或随便哪个操作系统
- 安装了NodeJs
- 安装了Git(这是必须的)
我们用到的Hook文件是 pre-commit ,顾名思义提交前我们来干些啥,钩子内容如下:
#!/usr/bin/env node
const execSync = require('child_process').execSync
const fs = require('fs')
const path = require('path')
const projectPath = path.join(__dirname, '../../')
const verFile = 'wwwroot/protected/_ver/_ver.php'
//读取 版本号文件
var tplData = fs.readFileSync(projectPath + '/' + verFile).toString()
//替换版本号
var match = tplData.match(/return (\d+);/i)
var _ver = 1
if (match) {
_ver = parseInt(match[1])
console.log('提交前的版本编号为: ' + _ver.toString())
_ver += 1
console.log('此次提交后的版本编号将为: ' + _ver.toString())
tplData = tplData.replace(/return \d+;/i, `return ${_ver};`)
}
//覆盖 版本号文件
fs.writeFileSync(projectPath + '/' + verFile, tplData)
//将变更的文件列入待提交内容里
execSync(`git add ${verFile}`)
//正确退出,输出非0值表示拒绝提交
process.exit(0)
- 其中 projectPath 为项目根目录,和 .git 同级。
- wwwroot/protected/_ver/_ver.php 为项目的版本编号,这个文件可以根据自己的需求改变,内容很简单,就是 return 一个数字编号。
- 利用正则匹配,把提交前把编号自动加1,并写入回文件,最后将这个文件加入更改列表,这样就人不知鬼不觉的修改了版本编号。
当然,这个编号完全可以根据自己的要求来做,至于是数字还是字符串,你来定义。
最后的最后,在你的项目里显示这个编号,如果你并不需要显示它,那你是来干啥的?点个赞把亲~