可以说我们是第一次发布.net库。我们希望进入Beta + Release Candidate阶段,以获取早期采用者的反馈。
因此,在SemVer的上下文中,我们最初将发布Version 1.0.0-Beta1。随着beta的增加和此后的发布候选。
为了争辩,我们现在的版本号是 0.3.0
因此,我们需要从SemVer中导出放置在各个.net版本占位符中的内容。那些是:
用于命名nuget程序包,也被nuget用于对程序包进行排序并得出它是否为预发行版本
请记住,程序集版本更改时,程序集的名称可能很强,绑定重定向可能会使Beta之间的移动复杂化
在文件属性对话框中哪个映射到“文件版本”
在文件属性对话框中哪个映射到“产品版本”
我们要在过程中实现语义版本控制,我们的版本为1.0.0,并且添加了两个新功能。我们将尽快提供这些功能。
问题是:我们应该命名下一个版本1.1还是命名为1.2,因为我们已经创建了两个新函数。
通常,如果我们添加n个新功能,我们应该将版本的次要部分增加n,还是在每次交付中仅增加1?
这是我目前正在处理的包。
这是我第一次尝试强制执行传统的变更日志格式并使用语义发布版本控制。发布本身运行良好,我正在对 travis CI 进行测试,构建包并将其发布到 npm,创建新版本和 git 标签。还创建了一个GitHub 包版本,在某种程度上,它替代了单独的变更日志文件。
我接下来要实现的是根据最新版本更改自动生成 ChangeLog。据我了解conventional-changelog可以帮助解决这个问题,但是每当我运行时:
$ conventional-changelog -p eslint-plugin-protractor -i CHANGELOG.md -w -r 0
Run Code Online (Sandbox Code Playgroud)
我正在将所有更改分组在0.0.0-semantically-released版本下,这是version我放入的存根package.json以避免在npm install.
我做错了什么,如何为每个语义发布版本生成日志?
Bower似乎偏离了semver规范,因为我有时会看到这样的依赖关系(来自2klic-angular/bower.json):
"dependencies": {
"angulargrid": "s-yadav/angulargrid#^0.4.0"
}
Run Code Online (Sandbox Code Playgroud)
这个问题在解释semver本身方面还有很长的路要走,但对于s-yadav/angulargrid#部分的解释却并非如此.
查看bower/lib/node_modules/bower-endpoint-parser/index.js
我看到以下代码:
function decompose(endpoint) {
// Note that we allow spaces in targets and sources but they are trimmed
var regExp = /^(?:([\w\-]|(?:[\w\.\-]+[\w\-])?)=)?([^\|#]+)(?:#(.*))?$/;
var matches = endpoint.match(regExp);
var target;
var error;
if (!matches) {
error = new Error('Invalid endpoint: ' + endpoint);
error.code = 'EINVEND';
throw error;
}
target = trim(matches[3]);
return {
name: trim(matches[1]),
source: trim(matches[2]),
target: isWildcard(target) ? '*' : target
};
} …Run Code Online (Sandbox Code Playgroud) 一位同事对模块的第一个版本进行了随意的争论.我们想知道0.0.1是否应该是初始版本.我认为0.1.0是正确的第一个版本,因为0.0.1意味着补丁的增量,而补丁意味着先前的版本.所以根据我的理解,必须有0.0.0.
我浏览了http://semver.org docs,它确实说0.1.0通常是初始版本,但是当主要版本也为0时,我没有看到任何规则反对将次要编号设置为0.
有谁知道0.1.0是最低版本是正式规则,还是只是一个约定?
.NET Standard规定了所有.NET平台必须实现的API.它的版本规则是什么?难道breaking.adding,在其中1.4增加并保持向下兼容1.3,而2.x不是向下兼容1.x?
文档不清楚.一些Microsoft文档表明纯向后兼容性:
给定.NET标准库版本,您可以使用针对相同或更低版本的库.(重点补充)
现在2.0已经出局,上面似乎不正确.话虽如此,发布博客帖子说:
从面向.NET Standard的库中,如果它们的版本低于或等于您要定位的版本,您将能够引用[.NET目标] .NET Standard .(重点补充)
同一博客文章自相矛盾:
为了允许.NET Framework 4.6.1支持.NET Standard 2.0,我们必须删除.NET Standard 1.5和1.6中引入的.NET Standard中的所有API.
现在2.0已经出来了,版本控制规则是什么?它似乎是breaking.adding.MSFT在哪里记录了这一点?
使用此在线 semver 检查器:https ://jubianchi.github.io/semver-check/
注意如何
版本“3.4.5”与表达式“3 ”
兼容。
但...
版本“3.4.5-1”与表达式“3 ”不兼容。
如何更改我的兼容性表达式以包含此预发布版本?
说我有一个NPM包:
current_version="1.2.3";
latest_version=`npm view "$package_name" version`
Run Code Online (Sandbox Code Playgroud)
如何使用semver命令行工具确定npm中的最新版本是否与current_version具有相同的主要版本?就像是:
semver --same-major "$current_version" "$latest_version"
Run Code Online (Sandbox Code Playgroud)
?
基本上,我想要做的是安装到具有相同主要版本的最新版本.
另一个相关的问题 - 如何在NPM注册表中找到与...相同的主要 semver版本的最新版本current_version?
在语义版本控制中,一般规则是仅在引入向后兼容功能时才增加次要编号,否则必须增加主要编号。将同样的方法,但使用不同的算法,是由使用的libtool。
我有一个问题,关于什么被认为是向后兼容的更改,什么不可以。
假设我已经编写了一个库,并且该库的公共标头包含一个typedef名为的数据类型foo。在1.0.0版中,这typedef看起来像这样:
typedef struct foo_t {
int x;
int y;
} foo;
Run Code Online (Sandbox Code Playgroud)
然后,我决定更改数据类型,在下一个版本中,它将看起来像这样:
typedef struct foo_t {
int x;
int y;
int z;
} foo;
Run Code Online (Sandbox Code Playgroud)
我仅在结构中添加了一个字段foo_t。这似乎是向后兼容的更改,但是上面的结构实际上是现在的另一种结构。我所做的并不是引入新功能,而其余所有功能都保持不变,而是我更改了已经存在的功能。
上面的数据类型通常用于与库的功能交换数据,但是用户可能已将其用于其他目的。如果用户使用1.0.0版编写了程序,而最后的更改构成了向后兼容的更改,则用户的程序也必须使用此新版本进行编译。
这个新版本如何命名为1.1.0或2.0.0?
编辑
您可以在此处阅读此讨论的进一步发展。