这更像是一个哲学问题,但我想知道该怎么走。
好吧,让我们举一个具体的例子。我在 Github 上有一个项目,它是一个 Ruby gem。
通常,当我发布一个新版本时,我会完成所有功能和修复,然后创建一个带有"Bumping version to v1.2.0"as 消息的提交,并且只包含 Changelog 更新和VERSION持续更新。该v1.2.0标签指向该承诺。
但是之后...
v1.3.0-alpha回购协议?v2.0.0?v1.2.x分支来处理补丁版本吗?围绕所有这些,您的流程和良好做法是什么?任何额外的建议?
谢谢大家!:)
在我们的工作中,我们通过 Jenkins 作业发布和部署我们的组件。这样做的问题是它只会增加“补丁”版本号(major.minor.patch,例如 4.2.1 变为 4.2.2)。我想要的是让工作告诉maven这是一个“次要”版本(4.2.1 -> 4.3.0),一个“主要”版本(4.2.1 -> 5.0.0)或补丁版本(默认)行为)。
Jenkins 将参数传递给 Maven 的接口很简单,但是是否有任何命令可以使 Maven 更新次要或主要版本,而无需明确说明您需要什么版本(和开发版本)。由于它可以如此轻松地进行补丁版本更新,我希望有命令可以对次要或主要版本执行相同的操作。
我有一个 npm 模块,它已经在4.x.xversion下发布,并且与3.x.x稳定版本相比有重大变化。
但是我有一些3.x.x版本更新并想修补它的 npm 版本。是否可以?我可以在 npm 上管理 2 个主要版本吗?
将https://docs.npmjs.com/cli/publish npm publish --tag做的伎俩?
在微服务产品中应用 SemVer 是否有最佳实践/模式?每个微服务是否应该有 SemVer,整个产品是否应该有 SemVer?
示例 - 我有一个名为 的产品,SuperDatabase包含 3 个微服务SuperDatabaseCore,分别为SuperDatabaseReports、 和SuperDatabaseSearch。
初始发行:
SuperDatabase v1.0.0
SuperDatabaseCore v1.0.0
SuperDatabaseReports v1.0.0
SuperDatabaseSearch v1.0.0
报告的小更新:
SuperDatabaseReport v1.1.0
产品应该是SuperDatabase v1.1.0现在吗?
如果以后有搜索补丁怎么办:
SuperDatabaseSearch v1.0.1
产品版本是否应该再次更改?产品版本是否应该完全独立于微服务?它到底应该使用 SemVer 吗?或者它不应该有任何版本控制?
我正在制作一个 npm 包,并将其发布为 1.0.0 版本,因为我对公共 API 很满意。但现在,我正在添加一个“示例”子项目来展示如何使用该库。显然,我不会将示例项目作为库的一部分发布(它将添加到 .npmignore 中),但它将出现在我的 github 存储库中。是否有任何语义版本控制规则?我应该更新补丁版本、次要版本还是什么也不更新?
一方面,我认为我不应该更新版本,因为它不会发布到 npm,因此应用程序的普通用户甚至不会注意到包中的差异。另一方面,semver 规则规定,当您进行文档更改时,您应该更新“补丁”或“次要”版本,即使文档也没有发布。
我的理解是,使用 XYZ,我们只更改 X 来进行重大更改。Y 表示向后兼容的功能更改。
因此,我的假设是否正确:即使我的更新绝对是对功能的巨大补充——没有重大更改,因为它只是一个补充,我仍然不会更改 X。
TLDR无论更新多么“重大”,如果它不是重大更改,您就不会更改 XYZ 的 X
我正在尝试在我的 javascript 项目中使用标准版本。我将release脚本添加到我的 package.json 中:
"scripts": {
...
"release": "standard-version"
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我向 git 存储库添加了一个提交,并显示以下消息:
feat: test
Run Code Online (Sandbox Code Playgroud)
我跑npm run release,它增加了项目的补丁版本。
所以我的初始版本是0.2.1(标签:v0.2.1),它是0.2.2用此提交消息生成的
chore(release): 0.2.2
Run Code Online (Sandbox Code Playgroud)
为什么不增加小版本?
我的目标是配置semantic-release为从受保护的分支创建标签,如下所示:
npx semantic-release --plugins @semantic-release/commit-analyzer --branches {'name': 'release/super-feature', 'prerelease': true}\nRun Code Online (Sandbox Code Playgroud)\n我期待该标签1.0.0-super-feature被创建。但是,我遇到了一个例外:
[semantic-release] \xe2\x80\xba \xe2\x9c\x96 EINVALIDBRANCH A branch is invalid in the `branches` configuration.\nEach branch in the branches configuration (https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#branches) must be either a string, a regexp or an object with a name property.\nYour configuration for the problematic branch is ``.\n[10:03:55 AM] [semantic-release] \xe2\x80\xba \xe2\x9c\x96 EINVALIDBRANCH A branch is invalid in the `branches` configuration.\nEach branch in the branches configuration (https://github.com/semantic-release/semantic-release/blob/master/docs/usage/configuration.md#branches) must be either a …Run Code Online (Sandbox Code Playgroud) 我对 SemVer 的概念很陌生。在我当前的项目中实施这似乎是一个非常有前途的想法。
根据 SemVer 概念,如果一个项目有名称project-a.b.c,则 a 是主要更新(重大更改),b 是次要更新(较新的实现),c 是补丁更新(错误修复)。
我的问题是,假设我有一个非常小的重大更改,我需要构建和更新我的存储库。那我该怎么办?
是重大更新还是补丁更新?
另外,SemVer 是否只适用于某些软件技术而不适用于所有技术?例如,一些节点开发人员告诉我他们很少使用这个。但是,我不确定有多少人在练习。
npm ×5
git ×3
github ×2
javascript ×2
node.js ×2
versioning ×2
architecture ×1
git-branch ×1
jenkins ×1
maven ×1
package ×1
package.json ×1
ruby ×1