2016-11-22 63 views
2

我有一个非常基本的pre-commit -hook用下面的代码在它:为什么我不能在pre-commit钩子中运行vagrant ssh?

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

但每当我试图提交我得到以下信息:

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

安装流浪汉,它在跑。如果我手动执行该命令,那么只有当Git试图运行它时,它才会起作用。

我已经试过如下:

  • 添加额外的脚本pre-commit.sh在我的项目的根目录,并要求从pre-commit钩子。
  • 在我的预提交钩子中添加了Vagrant二进制文件的绝对路径,但是接收到虚拟框未运行的消息(尽管如此)。

回答

1

预提交在自己的shell中运行,并拥有自己的环境。它不一定共享您的环境,也就是您的环境或当前目录。你需要在预先提交的钩子中明确。所以是的,你需要指定流浪者二进制文件的完整路径,或者你必须确保为运行预提交钩子的环境正确设置了PATH

使用完整路径时出现“虚拟框未运行”消息的原因是,提交挂钩不会在与流浪文件相同的目录中执行。您的流浪文件位于git存储库的根目录中。然后我期望它的工作 - 请参阅In a git hook is the current working directory guaranteed to be within the git repository?

如果您的流浪文件位于其他地方,您有几个选项。 您可以设置VAGRANT_CWD并给流浪在您Vagrantfile位于(见https://www.vagrantup.com/docs/vagrantfile/)提示或您指定的运行框的ID:

vagrant ssh <box-id> ... 

一个可以使用的

vagrant global-status 

确定这个ID。或者您只需确保脚本更改为流浪文件的目录。

相关问题