git:在任何客户端推送后,在服务器上自动运行bash脚本

我看过并find各种各样的git钩指南,但似乎没有适合这个特定的,简单的情况。

我有我自己的服务器,我推动代码更改(与git推起源大师)。 我这样做后,我必须ssh进入服务器,并运行我已经设置的function,“更新代码”,克隆回购,运行ant,重新启动tomcat等我想git运行这个“更新 – 代码“命令后,任何用户运行(git push)(从他们的机器,而不是服务器)。

回顾一下,在任何用户(从他们的机器上)推入我的repo之后,shell命令将自动在服务器上执行,就像我login并键入“update-code”一样。 有什么确切的步骤让git做到这一点?

你想使用post-receive钩子(详见man githooks ):

 post-receive This hook is invoked by git-receive-pack on the remote repository, which happens when a git push is done on a local repository. It executes on the remote repository once after all the refs have been updated. This hook executes once for the receive operation. It takes no arguments, but gets the same information as the pre-receive hook does on its standard input. 

请注意,如果多次引用在同一次推送中更新,则只会调用一次。 如果你需要被调用,并对不同的引用采取行动(即做一件事情master ,另一件事release/ ),那么你应该看看post-update钩子。

这些将被存储在远程服务器上的foo.git/hooks/目录中。 确保这些脚本是可执行的。

你可以在这里找到一个教程: 使用Git自动部署

你需要创建一个名为post-receive的脚本到你的git仓库(服务器端)的hooks目录下。

不要忘记在脚本chmod +x post-receive上设置可执行权限