2017-07-26 99 views
0

我在修訂版本56,哈希6af16aa3edf8。下一次修訂將是57,使用hash ???。有沒有辦法知道修訂版57的散列?我需要一個預先提交的鉤子。獲取Mercurial下一個提交哈希

爲什麼?

我開發了一個腳本,通過pre-commit hook調用,用於更新某些版本文件。這樣,編譯的可執行文件就可以提供關於它們的修訂版本的所有信息。我在我的版本文件中添加了當前提交的修訂版本號,只需使用「父版本號+ 1」進行檢索即可。由於在與同一存儲庫上的其他人員協作時修訂號碼不可靠,因此我更願意添加散列。不知道如何檢索它...

+0

哈希值更不可靠,因爲它是基於文件更改**生成的**。 – arrowd

+0

@arrowd對於「可靠」,我的意思是它明確標識了一個修訂版,而轉速號沒有。哈希(變更集ID)基於變更歷史中的文件更改和位置。對於給定的修訂,完整的40位數字將是唯一的。 https://www.mercurial-scm.org/wiki/ChangeSetID –

回答

3

不,你不能預測下一個散列,即使你完全知道它的變更集。提交時間也發揮了作用有:

~/hg-test $ hg ci -m "b in foo" 
~/hg-test $ hg id 
d65d61e6898a tip 
~/hg-test $ hg rollback 
~/hg-test $ hg ci -m "b in foo" 
~/hg-test $ hg id 
c7f5ff744e43 tip 

https://www.mercurial-scm.org/wiki/Nodeid

我建議解決您的問題,例如: 在你的構建工具,詢問該項目是否從倉庫建成。如果是這樣:檢索存儲庫信息。例如。

ver = $(hg log -r. -T"{node|short} from {date|isodate}") 

會給你

c7f5ff744e43 from 2017-07-26 14:05 +0200 

生成該信息的版本的文件在構建鏈上飛

對於分佈的目的,生成和該文件修改到包中,從而使構建過程當它發現它不是從版本庫檢出時啓動時,仍然有一個它可以使用的版本文件。

+0

感謝您的信息和提示。我想到了一些類似的東西,比如根據當前版本更新版本信息的預先構建步驟。更好的是,如果我可以在從一個提交跳轉到另一個提交時準備好所有信息,但是... –

+0

我認爲構建步驟的一部分:) 如果您使用任何持續集成,那麼您無論如何都有來自回購本身 - 並生成版本信息文件是構建的一部分。 如果你打包你的代碼進行分發,那麼它就是數據包創建的一部分,用於生成一個包含版本信息的小文件。 – planetmaker

+1

指定日期:) hg commit -m'msg'-d「2017-01-01 01:01:01」:) – Tom