【发布时间】:2018-11-03 10:50:49
【问题描述】:
我是 git 钩子和服务器端 git 功能的新手。我在客户端 git 上工作以提交和推送我的代码,我们使用 应用程序生命周期管理 (ALM) 工具 进行 git 合并。
我正在尝试编写 git 挂钩来对存储库中的新/修改文件进行一些测试。我能够编写和测试客户端钩子,例如 pre-commit
现在,我需要在合并到 master 之前添加一些服务器端 git 挂钩来验证文件,因为使用 -no-verify 选项跳过客户端验证进行了更改。当我浏览一些 git hook 教程时,pre-push hook 是服务器端的 hook。我试图创建预推送挂钩,它正在客户端工作。现在,即使使用 --no-verify 选项(不应在客户端上控制),当用户尝试推送更改时,如何将其作为服务器端挂钩并强制验证文件。
我最大的问题是当我们从本地分支/repo 执行git push 时如何触发服务器挂钩。
钩子的创建:
创建了一个名为 pre-commit 的钩子,并将其放在某个文件夹 git_hooks/pre-push 和 .git/hooks/pre-push 中。现在,为我的预推送脚本创建了一个符号链接。因此,每当我执行 git push 时,它都会触发 .git/hooks/pre-push,这是我的脚本的符号链接 git_hooks/pre-push
编辑:
我认为pre-push 和pre-receive 钩子是相同的,因为它们都是在git push 命令上触发的,但pre-push 仅在客户端工作,pre-recieve 在服务器端工作。
我创建了pre-receive 钩子并将其推送到主分支。现在,当我 git push 得到这个 error: cannot spawn hooks/pre-receive: No such file or directory。
我在 Windows 和 Linux 平台上都在尝试这个。在 Windows 上我收到此错误,在 Linux 上它甚至没有被触发。我在两个平台的主分支上都放置了pre-receive 钩子。
【问题讨论】:
-
我回答你的问题了吗?
-
@for 寻找答案的人: 错误:无法生成挂钩/预接收:没有这样的文件或目录。这个错误的原因是错误的 SHEBANG。我修改了它,我没有收到任何错误,并且预接收挂钩工作正常。我们应该将
pre-receive钩子放在服务器 .git/hook 文件夹中,然后每当您尝试推送更改时,服务器都会触发此钩子。无需在本地仓库中使用它。