git hooks以及它们如何工作

bra*_*rad 9 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
Run Code Online (Sandbox Code Playgroud)

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

ndi*_*dim 16

你基本上有两个选择:

  1. post-receive钩子放在服务器上,让服务器运行curl.
  2. post-commit在您的本地仓库上放置一个钩子,让您的本地盒子运行卷曲.

由于您的构建作业可能会从服务器上的repo获取要构建的代码,因此只有选项1才有意义.在第2种情况下,构建作业可能必须从本地框中获取代码,这可能不是您想要的.

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


Ste*_*äwe 11

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

  • +1 Hooks不受版本控制,并且不在存储库之间共享.主要是出于安全原因 - 让别人将代码推送到您的仓库中是一回事,让他们在您的服务器上运行代码是另一回事.此外,每个人拥有相同的钩子通常没有意义 - 平台可能不同,路径可能不同,服务器可能有不同的目的(登台,CI,部署,QA等). (8认同)