mercurial(hg)修改推送中钩子的传入变更集日期

时间:2015-11-20 01:33:04

标签: mercurial

使用Mercurial。

有没有人知道在传入推送期间是否有通过钩子修改变更集的提交日期的好方法,例如pretxnchangegroup?

一旦更改进入回购,变更日期始终是提交日期。我想将这些日期更改/覆盖到'推'日期 - 通过推送期间的挂钩。

似乎ctx.date()是一个元组并且是不可变的。

谢谢。

1 个答案:

答案 0 :(得分:0)

提交日期,作者以及补丁内容本身构成了changesetID。因此,更改任何一个都将更改changesetID - 因此无法在现有变更集上修改它们。

与大多数现代VCS一样,Mercurial是一个分布式版本控制系统,因此提交日期被记录为任何任意存储库收到的时间最多是任意的,而提交时间和日期是全局的因为它们仅被记录一次,并且在通过不同的存储库传播时不会改变。

你应该问问自己为什么需要这个。如果您处理了一个补丁系列,然后您希望将其推送到一个授权项目存储库,请在推送之前通过更新(commit --amend)作者方面的仍然草稿更改集来执行更改。您甚至可以集成一个钩子服务器端来强制执行此策略,该策略检查收到的提交的年龄,并在超过XX分钟时拒绝推送。

但是,如果你真的想要实现你所问的坏主意:

如果您在非发布存储库上运行,并且如果您收到草稿更改集,那么您可能会从刚刚收到的更改集创建具有更新时间戳的新提交,从而废弃旧的提交。使用evolve扩展可能会使这项工作变得更加容易。

如果您收到公共变更集,或者您的存储库正在发布,那么使用rebasecommit --amend执行这些操作似乎非常麻烦,我不会喜欢贡献,因为我最终会得到所有内容在我的本地存储库中编写并推送了副本。