【问题标题】:Sourcing a script from a Git pre-receive hook从 Git 预接收挂钩中获取脚本
【发布时间】:2020-04-17 17:18:02
【问题描述】:

我正在服务器中测试一个 git pre-receive 钩子。这是hooks/pre-receive的内容:

#!/bin/bash
echo "Hi $USER"
source pre-receive-hooks/bye

hooks/pre-receive-hooks/bye的内容是:

#!/bin/bash
echo "Bye $USER"

hooks/pre-receivehooks/pre-receive-hooks/bye 文件都是可执行的,具有相同的权限、相同的所有者和组。

当我从客户端推送到服务器时,我收到消息:

Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Hi sergioro
remote: hooks/pre-receive: line 10: pre-receive-hooks/bye: No such file or directory
To drop:/git/hooks_practice.git
   3fbfa15..c15d08d  master -> master

第一个echo 正在运行,但随后source 命令失败。为什么source 失败了?或者更一般地说,如何从 Git 挂钩中获取脚本?

我也尝试了以下命令,但在推送时都返回相同的错误:

source ./pre-receive-hooks/bye   # relative path
. pre-receive-hooks/bye          # source using the dot command
./pre-receive-hooks/bye          # run script directly

【问题讨论】:

    标签: git githooks


    【解决方案1】:

    source pre-receive-hooks/bye 更改为source hooks/pre-receive-hooks/bye 解决了这个问题。显然 Git 钩子有 $PWD 等于存储库的根目录,而不是钩子目录。

    【讨论】:

    • 文档 (githooks(5)) 概述了用于挂钩调用的工作目录。
    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多