我有一个非常基本的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
,并从预提交挂钩中调用它。答案 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 的目录。