2017-07-26 68 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