有没有办法配置GitVersion使用缩短版(例如,6个字符长)的哈希值进行版本编号?
即;
1.2.3-unstable645 Branch:'develop' Sha:'a682956dccae752aa24597a0f5cd939f93614509'
变为
1.2.3-unstable645 Branch:'develop' Sha:'a68295'
熵应该意味着额外的字符(过去,比如6,1.6^10*7
排列)没有提供明确的识别,但如果需要显示,则使版本更短。
答案 0 :(得分:0)
GitVersion发出断言版本号的许多不同部分,每个部分都可用于形成所需的版本号,但是,缩短的sha不是其中之一。以下是当前声明的所有变量:
{
"Major":0,
"Minor":21,
"Patch":0,
"PreReleaseTag":"",
"PreReleaseTagWithDash":"",
"PreReleaseLabel":"",
"PreReleaseNumber":"",
"BuildMetaData":"",
"BuildMetaDataPadded":"",
"FullBuildMetaData":"Branch.hotfix/0.21.1.Sha.57e16a787815c5e27c3a0edbf5224b3df64f1a69",
"MajorMinorPatch":"0.21.0",
"SemVer":"0.21.0",
"LegacySemVer":"0.21.0",
"LegacySemVerPadded":"0.21.0",
"AssemblySemVer":"0.21.0.0",
"FullSemVer":"0.21.0",
"InformationalVersion":"0.21.0+Branch.hotfix/0.21.1.Sha.57e16a787815c5e27c3a0edbf5224b3df64f1a69",
"BranchName":"hotfix/0.21.1",
"Sha":"57e16a787815c5e27c3a0edbf5224b3df64f1a69",
"NuGetVersionV2":"0.21.0",
"NuGetVersion":"0.21.0",
"CommitsSinceVersionSource":0,
"CommitsSinceVersionSourcePadded":"0000",
"CommitDate":"2017-07-14"
}
假设您正在使用某种形式的构建脚本,您可以手动缩短断言的sha,然后将其与其他必需变量组合以获得所需的版本号。
答案 1 :(得分:0)
熵应该意味着附加字符(过去,比如6,1.6 ^ 10 * 7排列)没有给出明显的识别,但如果需要显示则使版本更短
不确定您的数学,但开发人员通常只使用Git哈希的前六位,八位或十二位作为标识符。对于任何给定的小型回购,碰撞是不太可能的,但是definitely possible。我看过使用较短版本的工具仅用于显示目的,但在内部,它们使用完整的40个字符哈希值。
如果您正在构建SemVer字符串,则可以在缩写或完整格式中嵌入分支名称和提交哈希:
1.2.3-unstable645+develop.a68295
我的偏好一直是使用完整哈希:
1.2.3-unstable645+develop.a682956dccae752aa24597a0f5cd939f93614509
我也看过使用前六位和后六位的方案:
1.2.3-unstable645+develop.a68295-614509
回到你的数学...... SHA-1发出一个160位(20字节)的散列,需要40个字节才能以十六进制完整显示。对于输入中的每个变化,该算法相当好地在所有160位上分配比特变化。仅使用散列中的6个字符意味着您只获得3个字节(24位)的散列值,因此:
2^160 ~= 1.461502e+48
2^24 ~= 1.677722e+7
碰撞概率相当大。
你真的需要几位数?事实证明,该数字取决于您的存储库中的提交历史记录。 Git命令具有允许您匹配最短匹配唯一前缀的功能,而不必指定整个哈希。在你的历史中只有一次提交,那么它可能是一个数字,但是承诺堆积,这个数字总是增加。一些高活动回购(例如linux内核)需要至少11位数来唯一标识它们包含的每个提交,但该数字将随着时间的推移而继续增加。
所有这些的主要内容是存在那些将在其散列的前N个数字中具有散列冲突的存储库,其中N <1。 12.其中一些包含前六位数千次碰撞!你的里程会有所不同。