在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(-)
现在我有很多问题:
即便如此,实际上我希望我的开发分支有一个版本号,清楚地表明这是一个开发版本(因为没有人找到生成的" myproject-1.2.jar"文件应该考虑一秒钟在生产环境中运行此jar文件)。所以从我创建发布分支的那一刻起,我希望版本号能够反映出#34;这是版本1.2.0"和"这是基于1.2"。
的开发版本不幸的是,在创建发布分支时,将版本号标记为" 1.2"在那里和#34; 1.2 + dev"每次我尝试将更改从发布分支合并到开发中时,在开发分支上将导致冲突。 您是否有任何建议如何使用git进行此类版本控制?
答案 0 :(得分:3)
以下工作流似乎实际上能够在git中实现所需的版本控制:
<last-release>+dev
。<next-release>
并提交。releases/v<next-release>
来自develop。<next-release>+dev
并提交。releases/v<next-release>
分支到主人并标记它。这样,
答案 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
因此,您会获得基于上一发行版本的内部版本号。