Git 个挂钩未触发或正在使用 git 个挂钩清理

Git hooks not firing OR clearing things up with git hooks

我读过很多关于使用 git 钩子的文章,但不太了解全部情况。我的设置如下:我正在为我的公司做一个项目。我在 mac 上为网络应用程序编写代码,然后将其推送到 bitbucket 上的存储库。在公司的本地网络中,有一个虚拟的machine 运行服务器。现在,如果我已将一段新代码推送到存储库,我将远程登录到此 VM 并执行 git pull 命令。我想配置一个带有 git 挂钩的推送部署方案,所以基本上每当我将一些新代码推送到 repo 中时,VM 应该自动拉取它(你知道,就像某些服务允许你一样,例如 Laravel锻造).

在虚拟 machine 中有一个存储库目录,例如 C:\project(是的,它是 运行 Windows,*叹*)。我试过用一些 "hello-world" 代码将 post-receive 挂钩放入 C:\project\.git\hooks 目录,比如

#!/bin/sh
ECHO "HELLO"
pause

但是在我从我的开发环境 git push 之后它没有触发。我感觉好像我在这里做的事情完全错了,但找不到任何解决方案。提前致谢。

编辑

好吧,澄清一下,我想要实现的目标是:

  1. 我在我的 mac 上写了一些代码,我 push 到 bitbucket 上的私人仓库;
  2. 我公司本地网络中的虚拟机已经克隆了这个存储库;
  3. 发现bitbucket上有一些变化;
  4. 使用 git-hooks,它从 bitbucket 运行一些代码到 pull,例如:

列表项

#!/bin/sh
cd ../.. # cd back to project directory
git pull
npm install
bower install
...
  1. 如果情况需要,我什至准备安排 git fetch 任务,但没有挂钩工作。

您应该在 VM 服务器上使用 post-merge 挂钩,因为您 git 拉到那里。 post-接收在您执行 git 推送的服务器上触发。

将 post-merge 挂钩移动到您推送的远程仓库。

编辑:

如果您从 B 上的 repo 拉取 A,则会触发 post-A 上的合并。如果您从 A 推送到 B 上的回购协议,则会触发 post-B 上的接收。

这可能不是一个选项,但使用 Bitbucket webhook,您可以在项目中发生推送事件时通知 REST 服务,请参阅 https://confluence.atlassian.com/bitbucket/event-payloads-740262817.html#EventPayloads-Push

构建响应推送事件的 Rest 服务有很多选择(一种选择可能是使用 Phyton 脚本和 GitPhyton,但还有很多其他选择)