我的同事和我使用了几个存储在集中式(ubuntu,如果它很重要)服务器上的存储库。对于我们的一些项目,我们在许多不同的项目中包含与子存储库相同的4个存储库。对于不断推送/拉动/合并4个不同的子存储库而言,这可能有点令人恼火,因为通过网络传输所有内容需要一段时间等。
我想将这4个存储库合并到一个主存储库中,该存储库可以包含在我们未来的所有项目中。挑战在于我不想删除旧的子存储库,因为这会破坏工作正常的现有项目。
如果有一种方法可以将这些旧存储库指定为已弃用,或者至少使我的同事无法将任何新的更改集推送到这些存储库并显示有用的错误消息,那将会很棒。这可能是mercurial hooks为this tangential Q/A suggests吗?
答案 0 :(得分: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)
然后告诉mercurial在将任何更改集添加到存储库之前执行此挂钩,方法是将以下内容添加到.hg / hgrc文件中:
# .hg/hgrc
[hooks]
prechangegroup.deprecate = python .hg/deprecate.py
此解决方案同时警告编码器存储库未处于活动状态,指示编码器应在何处提交更改,并防止编码器将代码提交到已弃用的存储库。虽然这不是操纵文件系统权限的永久解决方案,但它确实指示人们在哪里可以找到新的存储库。希望别人觉得这很有用!
答案 1 :(得分:0)
如果您使用mercurial-server之类的内容,则可以撤销对已弃用的存储库的所有写入权限,以便唯一允许的操作是提取或更新。