【问题标题】:Can't run peridot test suite from a git hook无法从 git 挂钩运行 peridot 测试套件
【发布时间】:2015-01-16 19:53:13
【问题描述】:

我已经做了以下 pre-commit git hook:

#/usr/bin/env bash
echo "Running pre-commit hooks... "
vendor/bin/peridot -c OS/Specs/peridot.php OS/Specs/
echo "Done."

当我简单地将这个命令输入到终端时,它会运行我所有的测试。但是,当触发 git 钩子时,我得到了这个:

Running pre-commit hooks...
PHP Parse error:  parse error in /path/to/repo/vendor/peridot-php/peridot/bin/peridot on line 9
Done.

违规行包含一个带括号的数组 []。当我更改为旧的 array() 语法时,错误消失了(并被更远的另一个替换)。此外,当我在两个地方运行 php -v 时,我得到:

终端
PHP 5.4.24 (cli)(构建时间:2014 年 1 月 30 日 10:18:21)

预提交
PHP 5.3.28 (cli)(构建时间:2014 年 1 月 23 日 18:02:48)

为什么我的 Git 挂钩使用了错误版本的 PHP?我怎样才能解决这个问题?谢谢!

【问题讨论】:

  • 文件顶部有这个抛出错误:#!/usr/bin/env php
  • 嗯...好点。现在我需要弄清楚 PHP 5.4 的存储位置。
  • 试试locate bin/php看看他们都在哪里。或者,如果您的默认值为 5.4,则只会显示 which php
  • 这个 php 位置是否有可能跨平台(mac/linux)保持一致,所以我可以将它保存在 git repo 中?
  • 不是,不是。 Mac 默认安装了 PHP,但许多开发人员从 Homebrew 或 Macports 安装了一个新副本(主要是为了避免扰乱操作系统安装),这些都有自己的默认位置。也不保证不同的 Linux 发行版。您可能希望使用 shell 脚本 (a) 在配置文件中查找 PHP 路径,或者 (b) 如果您想变得非常聪明,请使用 locate 然后自动检测来自 php -v 的版本.我会选择第一个,如果没有提供配置文件,默认为php

标签: php git githooks


【解决方案1】:

看起来vendor/bin/peridot 是一个 PHP 脚本,因为您指出它以 PHP hashbang (#!/usr/bin/env php) 开头。看起来您的 Git 环境与您通常的用户帐户有不同的 PATH,因此它首先看到的是旧版本的 PHP。

在这种情况下,诀窍是在您的提交挂钩中硬连接 PHP 的版本,因此它不必进行任何 PATH 搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2023-01-19
    • 2022-01-05
    • 1970-01-01
    • 2022-12-22
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多