一些背景:
我有4个带有依赖项的nuget包.它们都处于预发布模式,并且按照自己的节奏从alpha变为"稳定".我希望能够在依赖关系定义中指定应包含预发布,但是当"稳定"版本可用时,它应该更新为稳定版本.
在NuGet Docs中,版本控制规则是定义[并]包含您指定的版本号,(并)排除您指定的版本号.
关于nuspec文件中版本影响的一些示例:
<dependencies>
<dependency id="MyComponent" version="1.2.0" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)
==>这将安装MyComponent 1.2.0或更高版本.(不包括预发布1.2.0-alpha)
<dependencies>
<dependency id="MyComponent" version="[1.2.0" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)
==>这将安装MyComponent 1.2.0或更高版本.(不包括预发布1.2.0-alpha)
<dependencies>
<dependency id="MyComponent" version="[1.2.0,2)" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)
==>这将安装MyComponent 1.2.0,但不包括版本2.0.0.(不包括预发布1.2.0-alpha,但包括预发布2.0.0-alpha)
目前我设置:
<dependencies>
<dependency id="MyComponent" version="(1.1.32767" />
</dependencies>
Run Code Online (Sandbox Code Playgroud)
但我发现这是一种非常丑陋的方式,并没有真正反映现实.(如果版本1.1.32767.1存在怎么办?)
我想知道如何指定您希望在最低版本中包含预发布版本?
我即将发布一个我在过去几周一直在工作的Python库.我已经阅读了很多关于Python依赖项的内容,但还不是很清楚:
有些人假装你永远不应该固定你的依赖版本,因为它会阻止你的库用户升级这些依赖项.
其他一些声称你应该总是固定你的依赖版本,因为它是保证你的发布以它开发它的方式工作的唯一方式,并防止依赖的重大变化在你的库中造成严重破坏.
我不知何故去了一个混合解决方案,在那里我假设我的依赖关系使用语义版本控制并仅固定主要版本号(比如说somelib >= 2.3.0, < 3),除非主要版本号是0(语义版本控制规定这些版本被认为是易变的并且可能会破坏API,即使只有补丁号被碰撞).
截至目前,我不确定哪种方式最好.是否有官方指南(甚至可能是PEP?),它规定了有关Python依赖关系的最佳实践以及如何指定它们?
是否有可能获得主要版本(<Major>.<Minor>.<Patch>)project.version?
例如,如果我的版本是1.3.4,我想1稍后在同一个pom.xml的配置中使用它
就像是:
<configuration>
<name>project_name.${project.version:major}</name>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如果没有,有哪些替代方案?
有一个非常方便的npm version命令.除了喜欢争论major,minor而且patch它接受类似的参数prerelease,prepatch等等.
它说,该命令按照工作文档semver.inc的功能.
这些pre命令我有一个问题.
说我目前正在版本v1.0.0.
如果我运行npm version prerelease它会将版本提升到v1.0.1-0.
是否可以根据https://github.com/npm/node-semver#prerelease-identifiers为预发布标识符提供额外的agrument ?
我希望有类似的东西npm version prerelease alpha会碰到版本,v1.0.1-alpha.0但这不起作用.
我已经为REST apis(header,url,...)评估了许多版本控制模式.到目前为止,最可靠的方法似乎是url选项:它适用于代理,并且不依赖于模糊日期等模糊模式.
现在,当我环顾四周,大家谁使用基于URL的方法似乎使用的版本,如v1,v2等.没有人使用次要版本,甚至是语义版本控制等模式.
这提出了一些问题:
换句话说:像GitHub这样的公司,v3如今只有今天(2015年),现在已经有7年了?这是否意味着他们实际上只改变了他们的api两次?我简直不敢相信.
任何提示?
例如:
2.0.0的package-name安装.2.1.2npm install package-name@latest它4.3.0如何安装没有重大更改的最新软件包?
什么是匹配语义版本控制的正确正则表达式?
例如,它不应该匹配
01.1.1
9.8.7-whatever+meta+meta
1.2.3.DEV
1.2.3-0123
1.0.0-alpha_beta
1.2-SNAPSHOT
1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788
Run Code Online (Sandbox Code Playgroud)
例如它应该匹配
0.0.4
1.2.3
10.20.30
1.1.2-prerelease+meta
1.1.2+meta
1.0.0-alpha
1.0.0-alpha.beta
1.0.0-alpha.1
1.0.0-alpha.0valid
1.0.0-rc.1+build.1
1.2.3-beta
10.2.3-DEV-SNAPSHOT
1.2.3-SNAPSHOT-123
1.0.0
2.0.0+build.1848
2.0.1-alpha.1227
1.0.0-alpha+beta
1.2.3----RC-SNAPSHOT.12.9.1--.12+788
1.2.3----R-S.12.9.1--.12+meta
Run Code Online (Sandbox Code Playgroud) 我非常喜欢语义版本控制方案,但它实际上只对API有意义,因为重点是突破变化和向后兼容性.对于非API,例如最终用户软件,许多规则不再有意义.例如,向后兼容的概念并不意味着什么; 用户体验新功能,或者他们没有,更少的错误或他们没有,等等.然而,我会受益于xyz版本化的明确方案,遵循语义版本控制的精神,以便用户可以有一些想法会有什么期望如果他们熟悉该计划,请从新版本号码中获取.
我试着草绘如下的东西:
另一个想法是,当某些用户可能依赖它们时删除的功能会产生x凸起,但在某些情况下这似乎是不合理的.(假设您了解所有用户,他们都希望删除一个非常小的功能.从1.0到2.0会有点违反直觉.)
这比语义版本更主观,因为客观地识别向后兼容的功能和破坏API的功能要容易得多.是否有任何"标准化"的版本控制方案,我可以探索更多的指导?
Rust crates使用语义版本控制.因此,每个具有突破性更改的版本都会导致主要版本的崩溃.一个重大更改通常被认为的东西,可能会破坏下游板条箱(代码依赖于问题的库).
然而,在Rust中,很多都有可能打破下游板条箱.例如,更改(包括仅添加)公共符号集可能是一个重大变化,因为下游包可以使用glob-imports(use foo::*;)将我们库的符号拉入其命名空间.因此,添加符号也可以打破依赖的条件箱; 看这个例子.
同样,更改(添加或更改版本)我们的依赖项集可能会破坏下游构建.您还可以想象下游包依赖于我们的一种公共类型的特定大小.如果有的话,这很少有用; 我只是想表明:如果只有下游的箱子足够努力,一切都可能是一个突破性的变化.
这有什么指导方针吗?究竟什么被认为是一个突破性的变化,什么不是(因为它被认为是"用户的错")?
我向凉亭注册了一个版本的"angular-backstrech-adrr":
bower register angular-backstrech-adrr git@github.com:AladdinMhaimeed/angular-backstrech-adrr.git
这是bower.json:
{
"author": "Aladdin Mhaimeed",
"name": "angular-backstrech-adrr",
"version": "1.0.4",
"main": "angular-backstretch.js",
"dependencies": {
"jquery": ">2.0.0",
"jquery-backstretch": "https://raw.github.com/srobbin/jquery-backstretch/master/jquery.backstretch.min.js"
}
Run Code Online (Sandbox Code Playgroud)
}
Bower说它已经成功注册,但是当我使用时:
bower info angular-backstretch-adrr
Run Code Online (Sandbox Code Playgroud)
它说没有可用的版本.
如果我更改版本并尝试再次注册,我会得到:EDUPLICATE
bower.json有什么问题吗?语法有什么问题吗?
versioning ×3
npm ×2
api ×1
bower ×1
dependencies ×1
maven ×1
npm-cli ×1
nuget ×1
pip ×1
python ×1
regex ×1
rest ×1
rust ×1
rust-cargo ×1