为什么我不能在预提交钩子中运行vagrant ssh?

时间:2016-11-22 09:43:23

标签: vagrant phpunit pre-commit-hook

我有一个非常基本的pre-commit - 钩子,其中包含以下代码:

#!/usr/bin/env bash
vagrant ssh -c "/var/www/public/tests.sh"

但每当我尝试提交时,我都会收到以下消息:

.git/hooks/pre-commit: line 2: vagrant: command not found

Vagrant已安装且正在运行。如果我手动执行该命令,那么只有当Git尝试运行它时,它才有效。

我已经尝试了以下内容:

  • 在项目的根目录中添加一个额外的脚本pre-commit.sh,并从预提交挂钩中调用它。
  • 在我的预提交挂钩中添加了Vagrant二进制文件的绝对路径,但后来我得到了我的虚拟框没有运行的消息(虽然它是)。

1 个答案:

答案 0 :(得分:1)

预提交在自己的shell中运行,具有自己的环境。它不一定共享您的环境,即 PATH 或当前目录。您需要在预提交挂钩中明确。所以是的,您需要指定 vagrant 二进制文件的完整路径,或者您必须确保为运行预提交挂钩的环境正确设置 PATH

你得到"虚拟框的原因是没有运行"使用完整路径时的消息是,提交挂钩未在与 Vagrantfile 相同的目录中执行。您的 Vagrantfile 是否位于git存储库的根目录中。然后我希望它能够奏效 - 见In a git hook is the current working directory guaranteed to be within the git repository?

如果您的 Vagrantfile 位于其他地方,那么您有几个选择。 您可以设置 VAGRANT_CWD 并为Vagrant提供 Vagrantfile 所在的提示(请参阅https://www.vagrantup.com/docs/vagrantfile/),或者指定正在运行的框的ID:

vagrant ssh <box-id> ...

可以使用

vagrant global-status 

确定此ID。或者您只需确保脚本更改为 Vagrantfile 的目录。