【问题标题】:mercurial (hg) modify incoming changeset date in a hook on a pushmercurial (hg) 在推送的钩子中修改传入的变更集日期
【发布时间】:2015-11-20 01:33:03
【问题描述】:

使用 Mercurial。

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

一旦更改进入 repo,更改集日期始终是提交日期。我想将这些日期更改/覆盖为“推送”日期——在推送期间通过挂钩。

看来 ctx.date() 是一个元组且不可变。

谢谢。

【问题讨论】:

  • 如果你这样做,提交哈希将改变,推送者将不得不用新的哈希再次拉下相同的变更集并去除旧的。他们还必须重新调整尚未推送到新变更集的任何工作。
  • 谢谢。让我尝试。你不会有一个小例子来证明这一点吗?
  • 抱歉,我从未尝试过,因为在大多数情况下,这不是一个好主意。规则总有例外。

标签: mercurial


【解决方案1】:

提交日期、作者以及补丁内容本身构成了 changesetID。因此,更改其中任何一个都会更改 changesetID - 因此它们不能在现有变更集上进行修改。

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

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

但是,如果您真的想了解您所询问的坏主意:

如果您在非发布存储库上操作,并且如果您收到草稿变更集,那么您可能会从刚刚收到的变更集中创建具有更新时间戳的新提交,从而淘汰旧的。使用 Evolution 扩展程序可能会使这项工作变得更容易。

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

【讨论】:

  • 谢谢大家。我在 ws 中运行 hg commit --amend -d yesterday (例如),看看你对哈希变化的意思。我将如何在钩子中做同样的事情?我的意思是如何简单地更改传入 cset a in 推送的日期(不使用 hg commit --amend)。一个非常简单的例子。我熟悉钩子设置,但正在寻找一种改变日期的方法。我意识到这也会改变哈希值,但只是想亲眼看看。再次感谢。
  • 在存储库之间推送和拉取交换变更集,并且不要更改现有变更集上的任何内容。它们用于同步存储库。因此,在推送或拉取时更改提交是毫无疑问的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多