2017-06-19 88 views
1

有沒有一種方法可以將GitVersion配置爲使用縮短版本編號(例如6個字符長)的哈希值?使用GitVersion縮短提交哈希

I.e;

1.2.3-unstable645 Branch:'develop' Sha:'a682956dccae752aa24597a0f5cd939f93614509' 

變爲

1.2.3-unstable645 Branch:'develop' Sha:'a68295' 

熵應該意味着其他字符(過去的,說6,與1.6^10*7排列)提供給無顯著識別反而使得版本短一點,如果需要顯示。

+1

我記得,我不這麼認爲。我看了看,但從未發現它。 – Philippe

回答

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" 
} 

假設你正在使用某種形式的構建腳本,你可以手工縮短斷言沙,再與其它所需的變量結合起來,以獲得所需的版本號。

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個數字中發生散列衝突,其中一些數據包含前六位數字中的數千個衝突!你的里程會有所不同。