Version control 版本号来自哪里?

Version control 版本号来自哪里?,version-control,version-numbering,Version Control,Version Numbering,我有一个版本控制系统(例如Subversion),现在我想建立一个构建过程。现在我必须创建一个版本号并将其插入到系统中。但是,版本号从何而来,从何而来?假设我想使用这个公共。。计划。我应该向构建脚本传递一个数字吗?或者我应该传递像increaseMajor、increaseMinor、increaseRevision这样的参数吗?或者,您是否建议创建一个带有生成脚本将检测到的编号的分支 我可以想象,主要版本号和次要版本号必须手动输入到某个地方。修订号可以自动增加。但我仍然不知道我会把主次号放在哪

我有一个版本控制系统(例如Subversion),现在我想建立一个构建过程。现在我必须创建一个版本号并将其插入到系统中。但是,版本号从何而来,从何而来?假设我想使用这个公共。。计划。我应该向构建脚本传递一个数字吗?或者我应该传递像increaseMajor、increaseMinor、increaseRevision这样的参数吗?或者,您是否建议创建一个带有生成脚本将检测到的编号的分支

我可以想象,主要版本号和次要版本号必须手动输入到某个地方。修订号可以自动增加。但我仍然不知道我会把主次号放在哪里

在我的例子中,我有一些我想压缩的php文件,但在我必须向php文件中插入一些版本号之前


我编辑这篇文章是为了让我的要求更清楚:

我不使用Subversion,那只是一个例子。我不想讨论版本号方案

假设我想要创建3.5.0或3.5.1版。我会将此版本号传递给生成脚本吗?脚本会在存储库中创建具有此编号的分支,还是希望有人已经创建了此分支?手动?或者构建脚本会查找分支的名称(例如“3.5.1”)并将其用于其他用途吗?版本号是来自我的大脑还是自动创建的(我猜主要/次要版本号是来自我的大脑,修订版本号是创建的)?或者,您会将该编号放入一个可能插入存储库的文件中吗


我想如果我使用发布管理工具,我会在那里插入版本号。但是我还没有使用。对于subversion,要么使用全局修订号并将其用作“构建”号,或者,更好的是,根本不依赖它并使用标记和/或分支管理版本。全球修订的主要问题正是,它对回购协议来说是全球性的。即使回购协议的某些部分没有改变,它也会增加


将版本与回购协议的修订完全分离是更好的做法。您有标签,请使用它们。

svn或任何其他版本控制系统中的版本与您的产品发布号(甚至您的版本号)不同

有多种方法可以强制执行版本号。通常在subversion中,您可以为构建创建一个分支(或标记,它们本质上是相同的),如果这是一个发布版本,您可以为此创建一个标记svn://my-repo/releases/1.0.0

您可以将一个参数传递到构建脚本中,以获取代码并将其用作构建编号,或者拥有一个构建脚本使用的目录,然后svn将其切换到要构建的分支,脚本可以使用svn info确定它正在构建的版本

x.y.i.j
其中
x
-主要版本,
y
-次要版本,
i
-版本号,
j
-版本号

主要版本
主要更改(新架构、新用户界面等)的增量

次要版本
次要更改(性能改进、主要错误修复等)的增量

buildnumber
每次发布公共版本时都会递增

修订号
每次提交对项目源代码树的更改时都会递增


我更喜欢将0作为修订号指向AssemblyInfo.cs,并将实数指向发布包的名称(foo-1.1.7.110-source.zip)

同意之前所有关于分支和标记的使用。另外,分支名称和标记名称可以通过一些巧妙的脚本被合并到构建过程中


我唯一想补充的一点是,您应该将您的SVN修订版潜入每个构建中。有时很容易回到某一点,而不是知道标签或分支。99%的标记/分支已经足够好了,但是修订版对于增量/内部/连续/测试构建非常有用。

所有分支都应该手动创建。构建脚本应该从签出(或者可能正在更新)开始处理标记和/或分支。作为构建过程的一部分,最好在构建的快照上创建一个标记

您通常会有内部版本号和版本。内部版本号可以自动递增,并作为内部版本的一部分签入版本控制(基于标记的内部版本除外,其中内部版本号必须位于存储库之外,这是避免基于标记的内部版本的另一个原因)


版本通常存储在每个发布周期手动更新一次的文件中。它被检查到右分支,然后被单独留下。例如,主线的文件中有version=“3”,发布分支上的第一个修订版本有version=“3.5”,如果需要补丁发布,您可以将其从发布分支上分支出来,并签入version=“3.5.1”

如果是DVCS,请使用哈希作为查询ID。对于SVN,请使用svnversion-c。