寻找一种方法使用git flow自动化“bump version”

时间:2012-04-19 12:27:59

标签: git bash awk git-flow version-numbering

我已经使用git flow几个月了,它运行得很好。我想自动化“凹凸版”操作。

该项目是PHP,footer.php有一个令牌替换为当前版本标记。我确信,随着git日志和PHP文件的一些问题,一切都应该解决,但我认为有人在此之前做过这个...

有什么想法吗?

8 个答案:

答案 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/2877083https://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-avhhttps://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上命名不同。