加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby生态系统中Semver的替代品

发布时间:2020-12-17 02:55:05 所属栏目:百科 来源:网络整理
导读:在ruby生态系统(甚至其他地方)中,是否有功能(即,我可以将它与捆绑器和 rubygems一起使用)替代SemVer? 我对SemVer(MAJOR.MINOR.PATCH)的问题在于它试图量化两个不兼容的东西: 改变大小(PATCH – 一个小变化) 向后兼容性(MINOR – 不间断,MAJOR – 打破) PAT
在ruby生态系统(甚至其他地方)中,是否有功能(即,我可以将它与捆绑器和 rubygems一起使用)替代SemVer?

我对SemVer(MAJOR.MINOR.PATCH)的问题在于它试图量化两个不兼容的东西:

>改变大小(PATCH – 一个小变化)
>向后兼容性(MINOR – 不间断,MAJOR – 打破)

PATCH仍然很可能是一个突破性的变化,这使得它等于MAJOR而小于MINOR,而MINOR小于MAJOR.
所以:

PATCH == MAJOR  && MAJOR > MINOR && MINOR > PATCH

这意味着PATCH<> MINOR在同一时间,这永远不可能是真的.

理想情况下,我希望有两个版本控制线 – 一个基于向后兼容性(例如没有破损,可能难以察觉的破损(==补丁),破坏)和一个基于变化大小(无视向后兼容性),一个人性化的版本行,如果你愿意的话.我希望能够同时使用它们.

(仅使用基于纯后向兼容性的版本控制,只要操作系统通过向屏幕写入“hello world”开始,我就可以从“hello world”转到操作系统.)

例如.:
如果H代表人类友好的版本控制,而B代表向后兼容性,则基于向后兼容性,那么我希望能够说:

>?> H2.0(==坚持使用H2.X;如果您使用的是H3.0版本,则添加
200MB的不间断附加功能,我不希望你这样做
下载,但确实带给我那些不间断的改进
在H2.0线上制作)
>?> B0.1(==给我不间断的变化(第3列,相当于
到Semver的第二列)并可能不知不觉地破坏
变化(第2列,相当于SemVer的第3列))

解决方法

rubygems / bundler中没有支持两个不同的并行版本号,没有.

但是没有理由你必须使用semver.您只需要一个版本号. Bundler和rubygems适用于任何版本号’x.y.z’,甚至’x.y’或’x.y.z.a.b’,其中所有组件都是数字.就“功能”而言,您可以使用一个版本号做任何您想做的事情. (如果你使用字母而不仅仅是数字,rubygems可能会认为它表示’预发布’版本.但如果你坚持使用数字,你可以做任何你想做的事情.

在semver之前,许多人只是在他们感觉到它的时候增加了组件,当它看起来像是一个重大的变化,或者一个小的变化,或一个微小的变化.您当然可以这样做 – 或使用任何其他系统来确定要应用的单个版本号 – 并且基础结构将正常工作.您的下游用户可能会也可能不会欣赏它.

我不确定你是否误解了semver. Semver says断裂变化必须是主要版本增量.如果“虽然PATCH仍然很可能是一个突破性的变化”,那么你就没有做过semver.根据semver的说法,一个突破性的变化必定是一个主要的版本.这并不总是遵循,无论是因为意外的错误,还是不了解semver的人,或者不愿意遵循它但想要说他们仍然关注它 – 但这就是semver所说的.

事实上,semver说版本号应该只是关于兼容性,而不是关于变化的“大小”(无论是主观的“大”还是字节大小;你似乎在谈论字节化的增量,我从来没有见过对版本的解释之前的数字).向后突破的变化需要一个主要版本的凸起;没有向后突破的更改的新功能需要一个小版本凹凸;否则(没有新功能,没有向后突破的变化;所以基本上是错误修正或内部重构)补丁级别的颠簸. Semver不会尝试合并两个不兼容的东西 – 而是试图完全抛弃其中一个,它抛出了版本号应代表“变化大小”的想法,它只代表兼容性.然而,人们对此的抵制是对semver的一些抵抗,是真的.

我不确定你的意思是“可能在不知不觉中突破变化”. Semver说,一个突破性的变化是主要的版本颠簸,你不会把它称为补丁,如果它“潜在地不知不觉地破坏”,我想这意味着只有一些人会注意到它而你猜测大多数不会? Semver对此类别没有兴趣. Semver不允许您在补丁级别版本中发布重大更改,因为您认为它“潜在地不知不觉中断”(也许您会喜欢它?).

版本控制和发布管理很难.它通常是维护者的痛苦和下游用户的痛苦之间的平衡.我怀疑创建两个单独的并行版本号会改善一些事情,而不仅仅是让任何人都更加困惑.我甚至不理解你是如何实现的“我不想让你下载它,但确实给我带来了你在H2.0系列中所做的那些不间断的改进” – 听起来你想象的不只是两个每个版本上的版本号,但实际上是版本号的两个完全不同的“行”?

好吧,我想你可以做到这一点,只是发布两个不同的宝石名称. Widget_H和Widget_B,我猜?我猜你的回购中有两个不同的git分支?我不知道,我很难弄清楚你的思考如何可能被运用到一个系统中,甚至是假设的.看起来它会让维护者和下游用户感到非常困惑 – 但是只使用两个不同的gem名称可以在rubygems / bundler生态系统中实现你想要的东西吗?

如果您还没有阅读过semver spec,我会非常鼓励,所以您了解semver是什么,不是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读