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

时间:2014-11-28 09:16:29

标签: git branch versioning release-management

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

  

发布分支是从develop分支创建的。例如,假设版本1.1.5是当前的生产版本,我们即将推出一个大版本。开发状态已经为“下一个版本”做好了准备,我们已经决定这将成为版本1.2(而不是1.1.6或2.0)。因此,我们分支并为发布分支提供反映新版本号的名称:

$ 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(-)

现在我有很多问题:

  • 开发分支仍然是1.1.5;什么时候会更新?发展分支是否落后"是否有意义?某个时刻版本号的发布分支?
  • 所以说我在创建发布分支之前增加了我的版本号。如果我这样做,我在开发和发布分支上有相同的版本号,直到下一个版本,我认为这更有意义。 创建分支后出现版本号的原因是什么?

即便如此,实际上我希望我的开发分支有一个版本号,清楚地表明这是一个开发版本(因为没有人找到生成的" myproject-1.2.jar"文件应该考虑一秒钟在生产环境中运行此jar文件)。所以从我创建发布分支的那一刻起,我希望版本号能够反映出#34;这是版本1.2.0"和"这是基于1.2"。

的开发版本

不幸的是,在创建发布分支时,将版本号标记为" 1.2"在那里和#34; 1.2 + dev"每次我尝试将更改从发布分支合并到开发中时,在开发分支上将导致冲突。 您是否有任何建议如何使用git进行此类版本控制?

2 个答案:

答案 0 :(得分:3)

以下工作流似乎实际上能够在git中实现所需的版本控制:

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

这样,

  • 很容易知道当前开发代码的版本 基于,
  • 在基于开发的分支上创建的jar文件很容易检测到 作为开发版,
  • 虽然发布分支上的提交仍然可以合并回来 发展部门。

答案 1 :(得分:0)

因此我们也遇到了同样的问题,并提出了三种可能的解决方案:

1。)当我们创建release分支并在该版本的初始提交中更改版本时,然后将develop分支中的版本更改为下一个可能的版本,并将alpha附加到该版本中,例如2.0.0-alpha,以便我们知道这是将来可能版本的预发行版(alpha表示可能合并了新功能)。如果下一个版本号最终与我们输入的版本号不同,则只需将其更改为正确的版本。

2.)develop分支在最后一个版本后附加了+development,因此很明显,这是从分支分支和/或从master部署的最后一个发行版的开发版本。但是,我们发现这还不清楚,因为它可能给人以印象,即它意味着该版本的开发版本……这是不正确的……因为它早于该版本!

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 (based on: 1.0.0)

或者如果您不想使用分支名称...

您可以这样做:

VERSION = if release
            version
          else
            commits = `git rev-list --all --count`
            "rev #{commits} (based on: #{version})"
          end

因此,您会获得基于上一发行版本的内部版本号。