【问题标题】:How do you version your projects? [closed]您如何对项目进行版本控制? [关闭]
【发布时间】:2010-09-13 15:05:42
【问题描述】:

我了解 Microsoft 在对其产品进行版本控制时使用此模板:Major.Minor.Build.Revision。

当“开发人员”想要表明软件有很大的变化并且不能假设向后兼容时,主要发生了变化。也许代码的主要重写已经完成。

次要数字表示旨在向后兼容的显着增强。

内部版本号是一个小的变化,例如重新编译相同的源代码。

修订版用于修复安全漏洞,应该可以完全互换。 Build 和 Revision 都是可选的。此信息基于MSDN Version Class

您如何对项目进行版本控制?为什么要以这种方式进行版本控制?

【问题讨论】:

    标签: .net versioning


    【解决方案1】:

    我只做 Major.minor。由于我是一个开发 Web 应用程序的单一开发人员(偶尔需要帮助),因此大多数人不会关心我所做的小修复。因此,当我进行一些更改/升级时,我只是在添加新功能和主要版本号时迭代次要版本。否则,我只是忽略版本号的小修复(尽管如果我需要自己参考,我确实有 Subversion 修订号)。

    【讨论】:

      【解决方案2】:

      我曾经喜欢在 80 年代对他们的 Clipper 编译器进行版本控制的 Nantucket 方式:

      快船 1984 年冬季
      快船 1985 年夏季赛
      快船 1985 年冬季
      快船 1986 年秋季
      快船 1987 年夏天

      哦,还有叠加层......

      [泪眼汪汪]

      【讨论】:

        【解决方案3】:

        Major.Minor.BugFix.SVNRevision

        例如:3.5.2.31578

        • SVN 修订版为您提供了发送给客户的代码的非常精确的安宁。您绝对确定该错误修复是否存在。
        • 它还有助于在您遇到应用程序错误时找到正确的 PDB。 只需在构建服务器上匹配 SVN 修订版,将 PDB 复制到 EXE 位置,打开调试器即可获得崩溃堆栈跟踪。

        【讨论】:

          【解决方案4】:

          我开始使用与 Ubuntu 类似的伪格式:Y.MMDD

          这有几个原因:

          • 更容易检查版本要求:if (version die/exit/etc.;
          • 它可以在您的构建过程中自动生成

          关于第二点(红宝石和耙子):

          def serial(t)
             t = Time.now.utc if not t.instance_of?(Time)
             t.strftime("%Y").to_i - 2000 + t.strftime("0.%m%d").to_f
          end
          
          serial(Time.now)     #=> 8.0926
          serial(Time.now.utc) #=> 8.0927
          

          注意:t.strftime("%Y.%m%d").to_f - 2000 遇到浮点错误:8.09269999999992

          【讨论】:

            【解决方案5】:

            Major.minor.patch.build 补丁是修补程序或补丁版本。

            如果您可以通过 QA 获得并使用 SVN,则可以使用 svn HEAD 修订版作为内部版本号。这样,每个构建都根据源代码控制描述了它的来源以及构建中的内容。这确实意味着您的构建会出现差距(1.0.0.1、1.0.0.34....)

            【讨论】:

              【解决方案6】:

              我个人喜欢使用侧重于项目/产品用户可以期望的向后兼容性级别的方案:

              1.0 之前:

              • 0.0.1 = 第一版
              • 0.-.X = 向后兼容更新
              • 0.X.0 = 向后不兼容的更新

              1.0之后:

              • -.-.X = 更新而不更改界面
              • -.X.0 = 使用向后兼容的接口添加更新
              • X.0.0 = 向后不兼容的更新

              使用兼容性作为版本号的中心点使用户更容易判断他们是否可以期待平滑和安全的升级。

              【讨论】:

              • 自从我写下这个答案以来,语义版本控制已经进入了现场:semver.org
              【解决方案7】:

              我只有一个号码。第一个版本是001。第二个版本的第三个测试版是002b3,以此类推。这只是个人的想法,我目前实际上没有任何“发布”的东西,所以这都是理论。

              【讨论】:

                【解决方案8】:

                我们通常根据当前的发布日期 YYYY.MM.DD.* 对项目进行版本控制,并且我们让内部版本号自动生成,例如,如果我们今天有一个版本,它将是 2008.9.26.BUILD .

                【讨论】:

                  【解决方案9】:

                  我经常看到 Xyz,其中 X 是发布后的年份,yz 是一年中的月份。 IE。 201 是发布后 2 年的 1 月。 IE。 5月产品发布时,首发号为105,明年2月发布为202。

                  【讨论】:

                    【解决方案10】:

                    我从事过很多较小的项目,我个人觉得这很有用。

                    PatchNumber.DateMonthYear

                    这适用于基于 Web 的小型工具,用户可以在其中查看上次更新时间和更新频率。

                    PatchNumber 是已完成的发布数量,其余用于向用户显示发布时间。

                    【讨论】:

                      【解决方案11】:

                      我们通常在我工作的地方做major.minor[.maintenance[.build]],但每个项目似乎略有不同。

                      主要/次要与您提到的相同。每次构建服务器运行时,小(错误)修复和构建都会增加维护。

                      【讨论】:

                        【解决方案12】:

                        我使用major.minor.point.revision,其中point 是仅修复错误的版本,revision 是存储库版本。这很简单,而且效果很好。

                        【讨论】:

                          猜你喜欢
                          • 2010-09-16
                          • 2015-03-08
                          • 2018-02-16
                          • 2019-11-03
                          • 2023-02-11
                          • 2017-03-10
                          • 1970-01-01
                          • 2012-09-12
                          • 2019-10-28
                          相关资源
                          最近更新 更多