使用GIT进行软件版本控制

3
我正在使用C#编写软件应用程序,目前我遵循(可能是最常见的)版本号方案:
Major. Minor. Patch. Revision 例如1.0.5.36182。
为了定义应用程序是否为beta版,我只需检查Patch整数。它是偶数吗?发布版。它是奇数吗?Beta版。
现在我从SVN切换到Git并希望在版本编号中使用提交。 最好的情况是:
Major. Minor. Patch-commit hash,例如1.0.5-47ad38f。
问题:
1.最好的方法是将应用程序定义为beta版还是继续使用当前的方法?
2.是否有一种基于GIT哈希值检查我的应用程序是否有新版本的方法?

@BlackVegetable 我正在为我的发布版本打标签 - 这个问题与软件本身有关。 - Devator
啊,对不起。我现在明白你在问什么了。我会删除那个注释的。 - BlackVegetable
1
基于GIT哈希值,不,你真的应该考虑到它是随机和不可预测的。 - njzk2
1个回答

2

这个问题充满了意见,但我会尽力帮助。

最好的方法是将我的应用程序定义为beta,还是继续使用当前的方法?

我建议只标记非beta版本,并使用git describe生成您的版本,例如git describe HEADgit describe some-branch。该命令的输出将类似于

  • some-tag,在这种情况下,你要求描述的内容(例如本例中的HEADsome-branch)恰好对应于标签some-tag,或者
  • some-tag-<n>-g<hash>,其中<n>对应于some-tag之后的提交数,<hash>对应于正在描述的提交的哈希值。

    例如,输出1.2.3-12-gabcd123表示所描述的提交是在标签1.2.3之后的第12次提交,并具有哈希值abcd123

按照这个方案,输出简单标签(如1.2.3)的版本可以被认为是稳定的,而一些距离标签(如1.2.4-12-gabcd1234)有一定提交数的版本可以被认为是不稳定的。

如果你需要手动标记非稳定版本,你当前使用的偶数补丁级别表示稳定版本,奇数补丁级别表示不稳定版本的技巧应该可以很好地工作,但是你可能希望使用一些组合的标签来标记这些版本,比如 alphabeta (或其他任意字符串) 如语义化版本建议所述。在这种情况下,排序规则是严格定义的:

优先级指的是版本在排序时彼此之间的比较方式。优先级必须通过将版本按照以下顺序分离成主要版本、次要版本、补丁版本和预发布标识符来计算(构建元数据不影响优先级)。优先级由从左到右比较每个标识符时出现的第一个差异决定,具体如下:主要版本、次要版本和补丁版本总是以数字方式进行比较。例如:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。当主要版本、次要版本和补丁版本相同时,预发布版本的优先级低于普通版本。例如:1.0.0-alpha < 1.0.0。两个具有相同主要版本、次要版本和补丁版本的预发布版本的优先级必须通过从左到右比较每个点分隔的标识符并找到差异来确定,具体如下:仅包含数字的标识符按数值大小进行比较,包含字母或连字符的标识符按字典顺序进行 ASCII 排序。数字标识符始终优先于非数字标识符。如果所有前面的标识符都相等,则具有更大的预发布字段集合的优先级高于具有较小集合的优先级。例如:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0。

有没有一种方法可以基于GIT哈希检查我的应用程序的新版本?

git describe 的输出具有字母数字排序的优点,只要您的标签以合理的方式命名。在语义化版本控制的情况下,版本比较定义如上所述。

如果您手动标记不稳定的补丁级别并依赖奇偶区分器,则比较变得更加棘手。在这里,语义化版本控制可能是更好的选择,因为它具有明确定义的顺序。

"检查新版本" 是一个棘手的问题; 您是否希望查询类似 GitHub 的东西以获取新标签并将其与当前标签进行比较?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接