最佳实践:软件版本控制

Rof*_*ion 212 versioning

是否有任何指导或标准的最佳实践如何在业余时间为您开发的软件进行版本设计以获得乐趣,但是有些人会使用它?我认为有必要对这样的软件进行编辑,以便您了解第一版正在谈论的内容(例如,修复错误,支持等等).

但是我在哪里开始版本控制?0.0.0?还是0.0?然后我如何增加数字?主要发布.小变化?并且不应该对版本控制系统的任何提交是另一个版本?或者这仅适用于以高效方式使用的版本?

Chr*_*isF 125

您应该从版本1开始,除非您知道"释放"的第一个版本在某种程度上是不完整的.

至于如何增加版本,这取决于你,但使用主要,次要,构建编号作为指导.

没有必要将您提交的每个版本的源代码控制作为另一个版本 - 您很快就会拥有非常大的版本号.当您向外界发布新版本时,您只需要增加版本号(以某种方式).

因此,如果您进行重大更改,请从版本1.0.0.0迁移到版本2.0.0.0(例如,您从WinForms更改为WPF).如果你做一个较小的更改从1.0.0.0移动到1.1.0.0(你添加了对png文件的支持).如果你做了一个小的改动,那么从1.0.0.0到1.0.1.0(修复了一些错误).

如果你真的想要详细使用最终的数字作为内部编号,这将增加每个签入/提交(但我认为这太过分了).

  • 还应注意,主要版本的变化通常不向后兼容.次要版本的增量在主要版本中向后兼容.由于更改的大小,从硬编码的MySQL实现更改为通用实现可能是主要版本,但也可以被视为功能更改(次要),因为它仍然向后兼容. (2认同)

Mah*_*aga 63

我会使用x.y.z一种版本控制

x- 主要版本
y- 次要版本
z- 版本号

  • 这类似于语义版本控制,参见[semver.org](http://semver.org/) (2认同)

Boz*_*sov 42

我基本上遵循这种模式:

  • 从0.1.0开始

  • 当它准备就绪时,我将代码分支到源repo中,标记为0.1.0并创建0.1.0分支,head/trunk变为0.2.0-snapshot或类似的东西

  • 我只向主干添加新功能,但是后端修复了分支,并且我及时从它释放0.1.1,0.1.2,......

  • 当产品被认为功能完整且没有重大缺点时,我声明版本1.0.0

  • 从那时起 - 每个人都可以决定何时增加主要版本......


Lor*_*. T 35

我对我的应用程序使用此规则:

XYZ

哪里:

  • x =主版本号,1-~.
  • y =特征号,0-9.如果更改包含带或不带错误修复的新功能,请增加此数字.
  • z =修补程序编号,0-〜.如果更改仅包含错误修复,请增加此数字.

例:

  • 对于新应用程序,版本号以1.0.0开头.
  • 如果新版本仅包含错误修复,请增加修补程序编号,以使版本号为1.0.1.
  • 如果新版本包含带或不带错误修复的新功能,请增加功能编号并将修补程序编号重置为零,以使版本号为1.1.0.如果功能号码达到9,请增加主版本号并将功能和修补程序编号重置为零(2.0.0等)

  • 我建议使用这个方案,而不是在"功能"/"修补程序"号码中滚动超过9 - > 0,只需转到10!如果以递增方式发布10次次要更新仍然是次要更新,则1.10.0或1.1.10没有任何问题. (36认同)
  • ..继续往上走.如果你真的有在v.2之前实现的23个功能怎么办?然后在最后一个功能上有30个错误修正?你会有版本1.23.30.主要版本发布是具有特定里程碑的大抽象概念,无需任意遵守十进制计数规则. (4认同)

Nae*_*raz 11

我们用abcd在哪里

  • a - major(在交付给客户时递增)
  • b - 次要(在交付给客户时递增)
  • c - 修订版(内部版本增加)
  • d - 构建(通过巡航控制增加)


cuh*_*cuh 5

A.B.C方法的另一个示例是Eclipse Bundle Versioning.Eclipse捆绑包有第四个部分:

在Eclipse中,版本号由四(4)个段组成:3个整数和一个分别命名的字符串major.minor.service.qualifier.每个部分捕获不同的意图:

  • 主要部分表示API中断
  • 次要部分表示"外部可见"的变化
  • 服务部分表示错误修复和开发流的更改
  • 限定符段表示特定构建


ath*_*spk 5

也有日期的版本方案,如:YYYY.MM,YY.MM,YYYYMMDD

这是非常有用的,因为第一次看起来给出了关于发布日期的印象.但我更喜欢xyz方案,因为我总是想知道产品在其生命周期中的确切点(Major.minor.release)