开发和发布分支的版本控制(git-flow)

12
http://nvie.com/posts/a-successful-git-branching-model/上说:

Release branches are created from the develop branch. For example, say version 1.1.5 is the current production release and we have a big release coming up. The state of develop is ready for the “next release” and we have decided that this will become version 1.2 (rather than 1.1.6 or 2.0). So we branch off and give the release branch a name reflecting the new version number:

$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)
现在我对此有几个问题:
- develop分支仍然停留在1.1.5版本;这个什么时候会更新?在某个时间点上,develop分支的版本号比发布分支“落后”是有意义的吗? - 所以说,在创建发布分支之前,我会先增加版本号。如果这样做,我在开发和发布分支上将有相同的版本号,直到下一个发布,我认为这更有意义。在创建分支之后增加版本号的原因是什么?
即便如此,实际上我希望我的开发分支有一个明确表明这是开发版本的版本号(因为任何在某处找到一个生成的“myproject-1.2.jar”文件的人都不应该考虑在生产环境中运行这个jar文件)。所以从我创建发布分支的那一刻起,我希望版本号能反映“这是1.2.0版本”和“这是基于1.2的开发版本”。
很不幸的是,在创建发布分支时,将版本号提升为"1.2",并在开发分支上将其提升为"1.2+dev",每次尝试将发布分支的更改合并回开发分支时都会导致冲突。您有什么建议如何在git中实现这种版本控制?
2个回答

9

以下工作流程似乎可以在Git中实现所需的版本控制:

  • 开发分支上的版本号为 <last-release>+dev
  • 从开发分支发布新版本时:
    • 更改文件中的版本号为 <next-release> 并提交。
    • 从开发分支创建分支 releases/v<next-release>
    • 在开发分支上,将文件中的版本号更改为 <next-release>+dev 并提交。
    • 发布完成后,将 releases/v<next-release> 分支合并到主分支并打上标签。

这样做的好处是:

  • 非常容易知道当前开发代码基于哪个发布版本,
  • 基于开发分支创建的JAR文件很容易被识别为开发版本,
  • 同时发布分支上的提交仍然可以并入开发分支。

1
所以我们遇到了同样的问题,并提出了三种可能的解决方案:
1.) 当我们创建发布分支并在初始提交中增加版本号时,我们会将开发分支中的版本号更改为下一个可能的版本,并在版本号后添加alpha,例如2.0.0-alpha,以便我们知道这是未来可能版本的预发行版(alpha表示新功能可能合并)。如果下一个版本号与我们输入的不同,则只需将其更改为正确的版本。
2.) develop分支在上一个版本号后附加了+development,以便清楚它是从该分支分支或从主分支部署的上一个发布版本的开发版本。但是,我们发现这不够清晰,因为它可能会给人留下它是该版本的开发版本的印象...但事实并非如此...因为它领先于该版本!
3.) 我们结合两种想法...我们根据分支名称动态修改develop分支上的版本,使用更有意义的内容显示它确实是开发版本,而不是任何类型的发布版本...例如,在Rails中:
major = 1
minor = 0
patch = 0

version = [major, minor, patch].compact.join('.')

# only release and master branch have a version
# bugfix/hotfix/feature branches are NOT releases and therefore don't have a version!
branch = `git rev-parse --abbrev-ref HEAD`
release = branch.match? /release|master/

VERSION = if release
            version
          else
            "X.X.x-#{branch} (based on: #{version})"
          end

例如,我们部署了一个用于测试的功能分支,VERSION 是: X.X.X-feature/rest-api(基于:1.0.0) 或者如果您不想使用分支名称...
您可以这样做:
VERSION = if release
            version
          else
            commits = `git rev-list --all --count`
            "rev #{commits} (based on: #{version})"
          end

所以你会得到一个基于最新发布版本的构建号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接