我和我的同事使用了几个存储库,这些存储库位于一个集中式(ubuntu,如果重要的话)服务器上。对于我们的几个项目,我们在许多不同的项目中包含了相同的4个存储库作为子存储库。在许多不同的项目中不断地推送/拉取/合并4个不同的子库可能会有点令人恼火,因为通过网络传输所有内容需要一段时间,等等。
我想将这4个存储库合并为一个主存储库,可以包含在我们未来的所有项目中。挑战在于,我不想删除旧的子库,因为这会破坏现有的运行良好的项目。
如果有一种方法可以将这些旧的存储库指定为不推荐使用,或者至少让我的同事无法将任何新的变更集推送到这些存储库并显示有用的错误消息,那就太好了。这可能吗,也许像这个切向的问答所暗示的那样,用多变的钩子?
我并不太倾向于使用文件系统操作权限,因为这不会向我的同事提供非常有用的错误消息。我能够用预先设置好的钩子完成这项任务(在mercurial 2.3中)。首先,创建一个文件(在本例中为.hg/depleted.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(' 33[%im%s 33[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
此解决方案同时提醒编码器存储库未处于活动状态,指示编码器应在哪里提交更改,并防止编码器将代码提交到不推荐使用的存储库。虽然这不像操作文件系统权限那样是永久性的解决方案,但它确实会指导人们在哪里找到新的存储库。希望其他人发现这个有用!
如果您使用的是类似mercurial服务器的东西,您可以撤销对不推荐使用的存储库的所有写访问权限,这样唯一允许的操作就是拉取或更新。