git hooks以及它们如何工作

时间:2009-11-11 18:47:24

标签: git hook

所以我试图通过post-receive钩子来构建hudson。在我的本地git repo中,我将post-receive.sample设置为post-receive,chmod 755并添加到行中:

/usr/bin/curl -u user:secret http://localhost:8080/hudson/job/MyJob/build?token=secondsecret

如果我强制构建,hudson会更新代码,但是这里是我不理解的,那个repo中的钩子没有像他们在本地那样的.sample,以及在hudson中的post-receive repo上面没有那行代码。这里发生了什么以及如何将钩子集成到整个git进程中?我需要更改远程仓库上的这个钩子吗?我本以为在本地做这件事就足够了,所以任何从该回购中取出的人都会得到新的钩子。我无法理解另一个用户的repo如何有不同的钩子。

2 个答案:

答案 0 :(得分:16)

您基本上有两个选择:

  1. post-receive挂钩放在服务器上,让服务器运行curl。
  2. 在您的本地仓库上放置一个post-commit挂钩,让您的本地框运行卷曲。
  3. 由于您的构建作业可能会从服务器上的repo中获取要构建的代码,因此只有选项1才有意义。在案例2中,构建作业可能必须从本地框中获取代码,这可能不是您想要的。

    您无法使用git push将挂钩放在服务器上。您(或具有适当权限的人)需要通过手动登录服务器并在本地修改钩子脚本文件来实现此目的。

答案 1 :(得分:11)

挂钩不会通过存储库共享。您需要在远程端安装挂钩。