2012-12-05 111 views
1

我有一个post-receive挂钩,需要一分钟才能执行。当执行这个钩子时,其他人不应该推动。如何防止git接收

有什么办法可以做到这一点?或者我如何配置git(在远程存储库中),以便它不允许从客户端推送?

回答

3

只需自己动手:在接收到的挂钩中创建一个锁定文件,并在完成后删除它。如果该文件存在,则添加一个pre-receive hook

虽然这将允许竞争条件。如果两个客户端同时开始推送,他们都会到达后接收挂钩。为什么你需要这种独家访问?

+0

我更喜欢这个解决方案:您可以在预接收钩子中设置一个明确的错误消息。 +1 – VonC

0

似乎没有git config否认全部推。

这使得你与技巧,以“破”的访问机制:

  • 如果你的用户是通过SSH访问到您的git回购协议,临时移动的〜/ .ssh/authorized_keys中。
  • 如果您的用户使用https地址,请移动用于这些事务的可执行文件<git>/libexec/git-core/git-http-backend

这不是一个漂亮的解决方案,因为在这两种情况下,它都会导致客户端出现错误消息,但在移动这些文件时您不会得到任何推送。