这有点相关这个问题但这是另一个问题。
我们有一个中央 Hg 存储库,通过 SSH 为用户提供服务,并且mercurial 服务器。我们有许多 Mac、Linux 和 Windows 客户端连接到它。
现在已经发生过两次,其中一个 Windows 用户破坏了他们的存储库,然后将其推回到中央存储库,从而破坏了它。我想在中央存储库上编写一个传入钩子脚本,以防止交易被接受,如果它会破坏中央存储库。
虽然不幸的是,我对 Mercurial 了解不够,无法编写这样的脚本。有没有可能其他人也遇到过这种情况?我个人不太清楚为什么 hg 默认不这样做。
答案1
Mercurial 的最新版本(自 1.5 起)支持对传入数据的验证。添加
[server]
validate = True
到服务器的 hg 配置(.hg/hgrc
或 hgwebdir 配置都可以正常工作),让服务器验证传入的数据并拒绝无效推送。然后客户端将看到类似于以下内容的错误:
remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
希望有帮助!
答案2
也许你应该完全避免推送到存储库。借助 Mercurial 及其分布式特性,每个人都可以拥有自己的分支,当他们觉得自己准备好时,他们会告诉你,然后你从他们那里拉取。没有提交访问问题,没有会破坏内容的推送...
当我从 SVN 迁移到 Mercurial 时,这至少是我的一个朋友给我的建议。
我不知道这对您来说是否是一种选择,但是为每个人设置一个个人存储库,然后从您需要的人那里提取信息,可能需要比试图捕捉危险的推送更少的工作量。
答案3
你不能做同样的事情吗David Herron 的博客,但不是在预路由上执行,而是在中央存储库上的预提交挂钩上执行?
答案4
一个可能的替代方案是:
- 推送之后克隆存储库。
- 验证一下。
- 如果存储库良好,则将其存档为最新的良好存储库
- 如果存储库损坏,请发出警报
- 发生警报时,恢复最新已知的良好存储库。
这个解决方案不是您所需要的,但至少,您可以在出现损坏时回滚存储库。