2

我和我的同事使用了几个位于集中式(ubuntu,如果重要的话)服务器上的存储库。对于我们的几个项目,我们在许多不同的项目中包含相同的 4 个存储库作为子存储库。这可能有点烦人,因为在网络上传输所有内容等需要一段时间,所以不断地在许多不同的项目中推送/拉取/合并 4 个不同的子存储库。

我想将这 4 个存储库合并到一个主存储库中,该存储库可以包含在我们未来的所有项目中。挑战在于我不想删除旧的子存储库,因为这会破坏运行良好的现有项目。

如果有办法将这些旧存储库指定为已弃用,或者至少使我的同事无法将任何新变更集推送到这些存储库并显示有用的错误消息,那就太好了。这有可能吗,也许正如这个切线问答所暗示的那样,使用了反复无常的钩子

4

2 回答 2

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

此解决方案同时提醒编码人员存储库未处于活动状态,指示编码人员应将更改提交到何处,并防止编码人员将代码提交到已弃用的存储库。虽然这不像操纵文件系统权限那样永久的解决方案,但它确实指导人们在哪里可以找到新的存储库。希望其他人觉得这很有用!

于 2012-09-12T21:49:34.310 回答
0

如果您使用的是mercurial-server 之类的东西,您可以撤销对已弃用存储库的所有写访问权限,以便唯一允许的操作是拉取或更新。

于 2012-09-07T14:11:11.640 回答