【问题标题】:Get Mercurial next commit hash获取 Mercurial 下一个提交哈希
【发布时间】:2017-07-26 09:52:43
【问题描述】:

我在修订版 56,哈希 6af16aa3edf8。下一个修订版将是 57,带有哈希 ???。有没有办法知道修订版 57 的哈希值?我需要它在预提交挂钩中。

为什么?

我开发了一个脚本,通过 pre-commit 挂钩调用,用于更新一些版本文件。这样,已编译的可执行文件可以提供有关它们所构建版本的所有信息。我在我的版本文件中添加当前提交的修订号,只需使用“父修订号 + 1”检索。由于在与同一存储库中的其他人协作时修订号不可靠,因此我也更喜欢添加哈希。不知道怎么找回...

【问题讨论】:

  • 哈希更不可靠,因为它是根据文件更改生成的。
  • @arrowd 使用“可靠”我的意思是它明确地识别修订,而修订号则没有。哈希(变更集 ID)基于文件更改和更改历史记录中的位置。对于给定的版本,完整的 40 位数字将是专有的。 mercurial-scm.org/wiki/ChangeSetID

标签: mercurial


【解决方案1】:

不,即使您完全知道它的变更集,您也无法预测下一个哈希。提交 time 也在那里发挥作用:

~/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

根据构建链中的信息即时生成版本文件

出于分发目的,生成此文件并将其修改到包中,以便构建过程在发现它不是从存储库签出开始时,仍然有一个可以使用的版本文件。

【讨论】:

  • 感谢您的信息和提示。我想到了类似的东西,比如根据当前版本更新版本信息的预构建步骤。如果我能在从一个提交跳转到另一个提交时准备好所有信息,那就更好了,但是……
  • 我认为这是构建步骤的一部分 :) 如果您使用任何持续集成,那么无论如何您都可以从存储库本身获得修订信息 - 生成版本信息文件是构建的一部分。如果你打包你的代码进行分发,那么它是数据包创建的一部分,以生成一个带有版本信息的小文件。
  • 指定日期 :) hg commit -m 'msg' -d "2017-01-01 01:01:01" :)
  • @Tom 是的,这确实有效。但通常这比一个人想要的更麻烦:)
  • 记住了为什么我不喜欢编辑源代码的预构建步骤。构建后,存储库处于修改状态,因此不是“干净”,尽管没有进行实际的“有意义”编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2021-06-13
  • 2020-09-06
  • 2016-04-03
  • 2013-01-23
  • 2012-12-31
  • 2023-04-02
相关资源
最近更新 更多