2015-02-28 4 views
4

Есть ли функционирует (то есть, что я могу использовать его с bundler и rubygems) альтернатива SemVer в пределах рубинового экосистемы (или даже в другом месте)?Альтернатива Semver в рубиновой экосистеме

Моя проблема с SemVer (MAJOR.MINOR.PATCH) является то, что он пытается количественно две несовместимые вещи:

  1. изменение размера (PATCH - небольшое изменение)
  2. обратная совместимость (MINOR - неразрушающий, MAJOR - нарушение)

PATCH еще вполне вероятно, будет разрывное изменение, хотя, что делает его рода равное MAJOR в то же время менее НЕСОВЕРШЕННОЛЕТНИЙ и НЕСОВЕРШЕННОЛЕТНИЙ меньше MAJOR. так:

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

Это означает, что PATCH <> MINOR в то же время, которое никогда не может быть правдой.

В идеале я хотел бы иметь две линии управления версиями - один на основе обратной совместимости (например нет поломки, потенциально незаметная поломка (== пластырей), поломка) и один в зависимости от размера изменений (без учета обратной совместимости), удобная для человека версия, если хотите. И я хотел бы иметь возможность использовать их одновременно.

(с чистой обратной совместимости на основе только версий, я мог бы перейти от «привет мир» для операционной системы до тех пор, как операционная система начинается с написания «привет мир» на экран.)

Eg: Если H обозначает человек дружной версионности и B для обеспечения обратной совместимости обратной совместимости на основе одного года, то я хотел бы быть в состоянии сказать:

  1. ~> H2.0 (== придерживаться H2.X; если вы сделаете версию H3.0, который добавляет 200мб неразрывный дополнительные функциональные возможности, я не хочу, чтобы вы скачать, но принесут мне эти неразрывные улучшения вы делают в H2.0 линии)
  2. ~ > B0.1 (== дать мне неразрывный изменяет (3-й столбец, эквивалентный к 2-й колонке Semver), и потенциально незаметно нарушение изменения (2-й столбец, что эквивалентно 3 столбца SemVer в))

ответ

5

В рубине нет поддержки gems/bundler для наличия двух различных номеров параллельной версии, no.

Но нет причин, по которым вы должны использовать semver. Вам просто нужен номер версии. Bundler и rubygems будут отлично работать с любыми номерами версий формы «x.y.z» или даже «x.y» или «x.y.z.a.b», где все компоненты являются числами. Что касается «функционирования», вы можете делать все, что хотите, с одним номером версии. (Если вы используете буквы, а не только цифры, рубигемы могут решить, что это означает «предварительную» версию, но если вы придерживаетесь цифр, вы можете делать все, что захотите).

До первого семестра многие люди просто наращивали компоненты, когда им это нравилось, когда они «казались» важными изменениями или меньшими изменениями или крошечными изменениями. Вы можете это сделать - или использовать любую другую систему для определения того, какой номер одной версии следует применять, - и инфраструктура будет работать нормально. Ваши нисходящие пользователи могут или не могут его оценить.

Я не уверен, если вы недопонимаете semver. Semver says, что изменение прерывания должно быть быть приращением основной версии. Если «PATCH все еще, скорее всего, будет изменением, хотя», то вы не делаете semver. По словам semver, разрывное изменение должно быть основным выпуском версии. Это не всегда следует из-за случайных ошибок или людей, которые не понимают semver, или не хотят следовать за ним, но хотят сказать, что они все равно следуют за ним, но это то, что говорит semver.

В самом деле, semver говорит, что номер версии должен быть только о совместимости, не о «размер» изменения (будь то субъективное «величина», или bytesize, кажется вам говорить о bytesize дельт, я Я никогда не видел эту интерпретацию номеров версий раньше). Изменения в обратном прерывании требуют серьезной ошибки; новые функции без обратных изменений требуют незначительной модификации; в противном случае (никаких новых функций, никаких изменений в обратном направлении, атакже в основном исправления ошибок или внутренних рефакторингов) на уровне патча. Semver делает не пытается включить две несовместимые вещи - скорее, он пытается выбросить одну из них целиком, она выкидывает идею о том, что номер версии должен представлять «размер изменения», он представляет только совместимость. Народное сопротивление этому, хотя, является некоторым сопротивлением к semver, правда.

Я не уверен, что вы подразумеваете под «потенциально незаметно нарушающимся изменением». Семвер говорит, что нарушение изменений - это серьезная ошибка в версии, вы не можете называть ее патчем, если она «потенциально незаметно ломается», что, я думаю, означает, что только некоторые люди заметят ее, и вы угадываете, что большинство не будет? Семвер не заинтересован в таких категориях. Semver не позволяет вам выпускать взломанное изменение в выпуске уровня патча, потому что вы решили, что он «потенциально незаметно ломается» (может быть, вам это понравится?).

Управление версиями и выпуском сложное. Это часто баланс между болью для сопровождающего и боль для нисходящих пользователей. Я скептически отношусь к тому, что создание двух отдельных параллельных номеров версий улучшит ситуацию, а не просто сделает вещи еще более запутанными для всех. Я даже не понимаю, как вы реализуете «Я не хочу, чтобы вы его загружали, но принесите мне те неутомимые улучшения, которые вы делаете в строке H2.0» - похоже, вы воображаете, что не только два номера версий на каждом выпуске, но на самом деле две совершенно разные «линии» номеров версий?

Хорошо, я полагаю, вы, , могли сделать это, просто выпустить с двумя разными именами драгоценных камней. Виджет_H и Widget_B, я думаю? Наверное, вы можете отключить две разные ветви git в своем репо? Я не знаю, мне трудно понять, как ваши мысли могут быть задействованы в систему, даже гипотетически. Похоже, что это сделает вещи ужасно запутанными как для сопровождающего, так и для нисходящего пользователя, - но просто используя два разных имени жемчужины, вы достигнете того, чего хотите в экосистеме rubygems/bundler?

Если вы еще не читали semver spec, я бы очень рекомендовал его, чтобы вы поняли, что такое semver и нет.

Смежные вопросы