我已经使用git flow几个月了,它运行得很好。我想自动化“凹凸版”操作。
该项目是PHP,footer.php有一个令牌替换为当前版本标记。我确信,随着git日志和PHP文件的一些问题,一切都应该解决,但我认为有人在此之前做过这个...
有什么想法吗?
答案 0 :(得分:15)
您可以使用the semver gem,它会将文件.semver
添加到您的git repo的根目录中。 Semantic version numbers建议使用结构化/一致/有意义的版本号,宝石只是让它易于实现。
所以,你需要做的就是添加:
semver inc major|minor|patch
进入您的工作流程(手动或脚本化),以便在发布期间更新.semver。
如果你不想要ruby依赖,semver非常简单,所以一些sed实验可能会产生一个可行的解决方案。
答案 1 :(得分:12)
还有 bumpversion (https://github.com/peritus/bumpversion的更多信息),旨在取代那种sed魔法。
使用pip install bumpversion
安装,告诉它哪些文件包含您的版本号以及是否要提交和标记该文件。它也是高度可配置的(默认使用语义版本控制),因此您可以添加声明性配置文件,了解如何将此软件项目的版本添加到您选择的vcs中,其他人也可以使用版本。
答案 2 :(得分:10)
在我的git-flow分叉项目中,我实际上实现了钩子和过滤器,这是许多在原始项目中做出的请求,但到目前为止还没有实现。有了这些,您可以自动更新项目中的版本号。 分叉项目可以在这里找到 https://github.com/petervanderdoes/gitflow
对于版本碰撞的一些Bash脚本,您可以查看我创建的两个要点 https://gist.github.com/2877083或 https://gist.github.com/2878492
答案 3 :(得分:3)
Semver网页声明:
给定版本号MAJOR.MINOR.PATCH,增加:
- 当您进行不兼容的API更改时的MAJOR版本,
- 以向后兼容的方式添加功能时的MINOR版本,
- 当您进行向后兼容的错误修复时的PATCH版本。
预发布和构建元数据的其他标签可用作 MAJOR.MINOR.PATCH格式的扩展。
Gitflow使用分支的命名约定,在前缀为hotfix/
的分支上实时修复错误,新功能以feature/
为前缀。
当此类型的任何分支合并到发布分支时,这会导致PATCH
增加。如果已合并某个要素,则应增加MINOR字段。
给定一个特定的修订版,您应该能够确定是否合并了其中一个分支以及哪个字段要合并。
困难的部分是找出一个突破性的变化。在过去,我曾考虑使用编译代码的反射来确定API是否已更改,但是,我认为在提交消息中使用关键字来指定重大更改会更容易。
答案 4 :(得分:1)
以下是我们用来增加constants.h中版本号的代码:
constants='../Include/constants.h'
# Get the current build number
currentbuild=`grep PRODUCT_BUILD $constants|sed 's/[^0-9]//g'`
currentversion=`grep PRODUCT_VERSION $constants|sed 's/[^.0-9]//g'`
echo "currentbuild=$currentbuild and currentversion=$currentversion"
newver=$((1+$currentbuild))
# Update the build number on-disk:
cp $constants /tmp/constants
if sed -e "/PRODUCT_BUILD/ s/[0-9][0-9]*/${newver}/" < /tmp/constants > $constants
then
echo "Updated build number from $currentversion.$currentbuild to $currentversion.$newver."
cd ../Include
# Check it into version control
svn ci -m "updated build number to ${currentversion}.${newver} for $buildid in $buildroot"
else
echo "There was a problem updating $constants to build $newver"
fi
答案 5 :(得分:1)
您还可以查看我的repo for bumpversion,它目前为python安装文件制作,可以修改Using-bumpversion-package
答案 6 :(得分:0)
您可以自动化每次提交的版本。 在这里,您可以使用shell脚本和内置的git钩子完成它: https://github.com/addonszz/Galileo/tree/develop/githooks
要运行的shell脚本是: https://github.com/evandrocoan/.versioning/blob/master/scripts/updateVersion.sh
关于自动化每件事的问题是,当你提交所有东西时,如何知道你是在更新Major,Minor,Patch还是Build。
我的意思是,对于构建,您可以自动执行每个开发分支提交,如上面的链接所示。
补丁,你可以挂钩每个git flow hotfix完成。上面的链接只是缺少挂钩修补程序完成以增加运行的补丁版本:
./githooks/updateVersion.sh patch
但是小调和专业没有技巧,他们都是在功能完成版本中完成的。
我找到了解决挂钩前修补程序提交的解决方案,问题在于: How to pre-hook the gitflow hotfix finish?
答案 7 :(得分:0)
如果我正确理解您的'凹版版'操作,那么您的意思是在使用git flow release start x.x.x
开始发布后,增加任意数量文件中的版本号,其中版本也在git标记中表示。
由于Driessen的原始git-flow已经停止,非官方的继任者似乎是Peter van der Does gitflow-avh
(https://github.com/petervanderdoes/gitflow-avh/),它包含大量的git flow hooks。有关完整列表,请参阅https://github.com/petervanderdoes/gitflow-avh/tree/develop/hooks。
我用这个小脚本在post-flow-release-start
上做了版本碰撞:
VERSION=$1
# Get rid of version prefix
STRIPPED_VERSION=`echo $VERSION | cut -d'v' -f 2`
sed -i '' -E "s/^([ |#|[:alpha:]]*)\[.*\]$/\1[$STRIPPED_VERSION]/1" ./README.md
sed -i '' -E "s/^([\t| ]*\"version\": )\".*\"/\1\"$STRIPPED_VERSION\"/1" ./package.json
git commit -a -m "version $STRIPPED_VERSION"
exit 0
这有点严格,因为这两个文件是硬编码的(README.md和package.json)。您可以从最后一个标记中搜索旧版本,然后为循环中的所有已配置文件重新填充它。
注意事项:
OSX需要sed -i
的后缀,但您可以使用空引号。此外,sed
的扩展正则表达式参数在Linux上命名不同。