何时不应该对提交进行版本标记?


30

上下文:我最近发现了语义版本控制,并且正在尝试确定如何在我自己的项目中最佳地实际使用它。

鉴于semver需要对主要更改,次要更改和补丁进行版本控制,何时不应使用更​​新的版本标记提交?在我看来,每项更改都将属于这些类别之一,因此,应对每项更改进行版本控制,但是当我查看GitHub上的各种流行项目时,这似乎并不是事情的完成方式(只是看一下实际上,大型项目只有数以百计的标签才有成千上万次提交。


23
是您在项目中掌握稳定,经过测试,有质量保证的版本的每项承诺吗?
Alex Reinking

1
@AlexReinking每个提交都经过测试,但是我只是想习惯于我的个人项目的常规做法,所以这只是我的工作,因此除了“进行更改,测试”之外,实际上没有其他合适的系统自己动手做”。
VortixDev

另请注意,标签可以稍后更改。唯一可靠的提交标识符是提交哈希键。
托尔比约恩Ravn的安德森

9
每次提交掌握???你永远不要致力于掌握。每次合并到母版听起来都好多了。
xyious

2
我认为@xyious碰到了头。最终在master上的每个提交都应标记一个版本,因为在master上的每个提交都应该是来自development的发行合并
BJ Myers

Answers:


71

SemVer关注版本发布,而不是提交。如果您的版本控制模型恰巧要求对master的每次提交都是一个发行版,那么可以,将需要根据更改的程度来标记每个commit。

通常,尽管如此,项目会在master上开发一款最稳定的产品,并标记它们认为值得支持的发行版。当他们这样做时,他们将根据其版本控制方案进行标记,而不必特别是SemVer。


5
SemVer仅对用户是其他代码而非人的库有意义。在大多数面向用户的应用程序中,实际上并没有任何“重大”更改,因为用户可以自动适应新版本。
Qwertie

5
我认为应该对面向用户的应用程序的命令行版本进行语义版本控制,因为它们的标志和输出格式的行为可能有所不同。灰色区域的位。
Alex Reinking

5
@Qwertie用户期望值不像软件期望值那么严格,但是它们仍然存在。我肯定使用了许多发布了我认为对其界面或功能进行“破坏”更改的软件。确定主要版本与次要版本的定义肯定比使用库更主观,但这不一定是避免使用它的原因。
Iron Gremlin

11
@Qwertie-阻止升级。仍有多少人运行Windows和Office的旧主要版本?
Alex Reinking

5
@Qwertie可能会启发他们仔细阅读更改日志或文档,以便他们可以调整使用系统的方式来利用新的或修改的功能,或者找到已删除功能的变通办法。情况相同,因为软件已更改,因此他们对软件的使用需要更改,因此您应该明确地告诉他们该更改。
Iron Gremlin

11

版本号分配给发行版。通常,并非每个提交都应该是一个发布。有几个原因。

首先,当您说您“测试”每个提交时,都有测试级别。一台机器上运行一个自动化测试套件很好,但是在复杂的软件中,它可能无法解决所有问题。有些问题可能是特定于硬件或配置的,某些问题可能更多地是关于人为主观的考虑,而不是关于可测试的需求。

其次,增加主版本号应该是一个罕见的动作。基本上,这意味着需要手动检查与软件有关的所有内容,以查看其是否与任何已删除的功能有关。

这样的结果是,如果您准备长期支持这些功能,则应仅在完整版本(而非alpha / beta)中向“公共API”添加功能。

第三,减少广泛使用的版本数量很有帮助。即使在一个稳定的分支上,将多个修订汇总在一起并发布一个版本通常也比为每个修订发布一个版本更好。


2

似乎很明显地说,但是:版本号的目的是让您轻松确定任何人正在运行的软件版本。

如果任何人都有机会访问代码的特定迭代,并且否则不易确定唯一标识符,则该迭代应具有唯一的版本号。我认为这是“第一条规则”。因此,不同的发行版显然需要不同的版本号。

但是,还有更多的作用:

确保这一点的一种方法是在每次提交时增加版本号,但这通常不是一个好主意。要进行相对较小的更改可能需要几次提交/迭代,并且由于大量累积的更改然后0.0.2-> 0.0而使外部版本0.0.1-> 0.0.2令人迷惑.56,因为有人犯了空格,一次只能修复一个文件,并且没有改变任何功能。

从“每个完整版本一个版本”到“每次提交一个版本”的路途到底有多长:您,其他用户以及您愿意使用哪些系统来填补空白。

我个人习惯于处理小型项目,很高兴使用git hash,直到其他人使用的版本以及每个版本的凹凸版本为止(无论我希望有多少人使用它)。但是,在较大的公司和较大的项目中,使用了语义版本号以外的内容,但保真度低于每次提交,例如使用发行候选编号。这些具有优点,但是增加了复杂性。


0

合并到主服务器的每个请求都应进行版本控制。

如果它不应该是新版本(至少是补丁程序),则可能不应该将其合并到母版中,因为功能/修复/等不完整。

但是,根据团队的工作流程,您仍然可能最终要提交多次提交,而无需版本。如果在拉取请求中有多个提交没有被压榨(在我看来,它们不应该被压榨),您可能最终仍然会有10个提交和一个新版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.