【问题标题】:disable/deprecate (but not delete) mercurial repository禁用/弃用(但不删除)mercurial 存储库
【发布时间】:2012-09-07 13:36:01
【问题描述】:
我和我的同事使用了几个位于集中式(ubuntu,如果重要的话)服务器上的存储库。对于我们的几个项目,我们在许多不同的项目中包含相同的 4 个存储库作为子存储库。不断地在许多不同的项目中推送/拉取/合并 4 个不同的子存储库可能会有点烦人,因为通过网络传输所有内容等需要一段时间。
我想将这 4 个存储库合并到一个主存储库中,该存储库可以包含在我们未来的所有项目中。挑战在于我不想删除旧的子存储库,因为这会破坏运行良好的现有项目。
如果有办法将这些旧存储库指定为已弃用,或者至少使我的同事无法将任何新变更集推送到这些存储库并显示有用的错误消息,那就太好了。这可能吗,也许mercurial hooks 为this tangential Q/A suggests?
【问题讨论】:
标签:
mercurial
mercurial-subrepos
mercurial-hook
【解决方案1】:
我并不太倾向于使用文件系统来操作权限,因为这不会为我的同事提供非常有用的错误消息。我能够使用prechangeset hook 完成此操作(在 mercurial 2.3 中)。首先,创建一个文件(在本例中为 .hg/deprecated.py)以将挂钩存储在您希望弃用的共享存储库中:
# .hg/deprecated.py
import sys
import textwrap
# print out a helpful error message in red to make it obvious things
# are not working
msg = "ERROR: Pushing changesets into this repository is no longer supported. "
msg += "This package has been merged into the /path/to/new/repo repository."
print('\033[%im%s\033[0m'%(31, textwrap.fill(msg)))
# return a non-zero exit code to disallow the changeset to be added to the
# target repository
sys.exit(1)
然后通过将以下内容添加到您的 .hg/hgrc 文件中,告诉 mercurial 在将任何变更集添加到存储库之前执行此挂钩:
# .hg/hgrc
[hooks]
prechangegroup.deprecate = python .hg/deprecate.py
此解决方案同时提醒编码人员存储库未处于活动状态,指示编码人员应将更改提交到何处,并防止编码人员将代码提交到已弃用的存储库。虽然这不像操纵文件系统权限那样永久的解决方案,但它确实指导人们在哪里可以找到新的存储库。希望其他人觉得这很有用!