Git钩子触发但未执行:post-receive创建文件失败问题排查
Git post-receive钩子执行后未生成预期文件的问题解决
问题情况
- 在远程仓库的
.git/hooks目录下创建了post-receive钩子,代码如下:
#!/bin/sh set -x touch file
- 已经用
chmod +x .git/hooks/post-receive给钩子加上了执行权限 - 从本地往远程推送代码时,能看到远程输出调试信息
remote: + touch file,但找遍远程仓库都没看到生成的file文件 - 直接在远程仓库里手动执行
sh .git/hooks/post-receive,却能正常生成file文件
问题根源
Git运行post-receive钩子的时候,工作目录不是.git/hooks所在的目录,而是处于Git内部的某个路径。这时候用相对路径touch file创建的文件,其实是在钩子的执行路径里,而非你以为的远程仓库目录。
解决办法
把钩子里的相对路径改成绝对路径就行,比如:
#!/bin/sh set -x touch /home/file
修改后再推送代码,就能在指定的绝对路径下成功生成文件了。
内容的提问来源于stack exchange,提问作者Sherif eldeeb
相关产品推荐
相关产品推荐

